领域对象服务器。同步初始本地数据库

时间:2017-05-02 22:44:37

标签: swift realm realm-mobile-platform

我有一个本地Realm数据库,满160000行。我想将它复制到Realm的本地路径,以便能够将其用作官方数据库,并在线同步。 (所以我的空Db将被同步)。我能这样做吗? (此时,因为它在本地文件夹中复制Db而不在用户特定文件夹中复制,所以不起作用)

func loginCompletedA(user: SyncUser) {
        let realmURL = URL(string: “realm://xxx.compute-1.amazonaws.com:9080/beerUsers”)!
        var configuration = Realm.Configuration.defaultConfiguration
        configuration.syncConfiguration = SyncConfiguration(user: user, realmURL: realmURL)
        let defaultURL = configuration.fileURL!
        //let defaultParentURL = defaultURL.deletingLastPathComponent()
        if let v0URL =  Bundle.main.url(forResource: “default”, withExtension: “realm”){
            do {
                //if !ifNotExists {
                try FileManager.default.removeItem(at: defaultURL)
                //}
                try FileManager.default.copyItem(at: v0URL, to: defaultURL)
            } catch {}

            do {
                try FileManager.default.copyItem(at: v0URL, to: defaultURL)
            } catch {}
        }else{

        }


        let realm = try! Realm(configuration: configuration)
        let session = user.session(for: realmURL)!
        downloadToken = session.addProgressNotification(for: .download, mode: .reportIndefinitely) {
            print(“download progress: \($0)“) // This is never called.
        }
        uploadToken = session.addProgressNotification(for: .upload, mode: .reportIndefinitely) {
            print(“upload progress: \($0)“) // This is never called.
        }
    }

1 个答案:

答案 0 :(得分:1)

只是为了确认我认为你在问什么。您预先捆绑了一个Realm数据库文件,其中包含160,000行数据以及您的应用。当新用户登录应用程序时,数据将与其帐户同步。

未同步的Realm文件和同步的Realm文件是两种不同的文件格式,因此无法将一个文件转换为另一个文件。将预先捆绑的脱机Realm复制到用户控制的目录,然后尝试应用syncConfiguration对象不会做任何事情。

最简单的解决方案是创建一个新的同步Realm,然后在第一次启动应用程序时将数据从预先捆绑的Realm复制到同步的Realm中。

let bundledRealmURL = Bundle.main.url(forResource: “default”, withExtension: “realm”)!

let localConfiguration = Realm.Configuration()
configuration.readOnly = true
configuration.fileURL = bundledRealmURL
let localRealm = try! Realm(configuration: configuration)

let syncConfiguration = Realm.Configuration()
syncConfiguration.syncConfiguration = SyncConfiguration(user: user, realmURL: realmURL)
let syncRealm = try! Realm(configuration: configuration)

let myObjects = localRealm.objects(MyObject.self)

try! syncRealm.write {
    for myObject in myObjects {
         let newObject = MyObject(value: myObject)
         syncRealm.add(newObject)
    }
}

我们正在探索如何让它更容易预先填充'同步领域用于未来版本的Realm。 :)

相关问题