swift - Realm 对象服务器。同步初始本地数据库

标签 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.
        }
    }

最佳答案

只是为了确认我认为你在问什么。您预捆绑了一个 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 的 future 版本“预填充”同步的 Realms。 :)

关于swift - Realm 对象服务器。同步初始本地数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43748387/

相关文章:

ios - 放松转场,音频继续播放

ios - 如何从源代码正确打开新 Controller ?

ios - 域@count查询问题

java - Realm Android - 多个库的多 Realm 模块

android - Android : Correct structure or not? 中具有单例模式的 Realm

ios - Firebase 数据检索,路径内路径

ios - 使用 ? Swift 变量中的(可选)

tomcat - 自定义 Realm/从 Netbeans 6.8/第一个 HTTP 请求启动 Tomcat 6.0

ios - Realm - 匿名用户同步到新设备