【问题标题】:Realm Object Server. Sync initial Local DB领域对象服务器。同步初始本地数据库
【发布时间】:2017-05-02 22:44:37
【问题描述】:

我有一个本地 Realm 数据库,有 160000 行。我想将它复制到本地路径,以便 Realm 能够将其用作官方数据库,并在线同步。 (所以我的空数据库将被同步)。我可以这样做吗? (此时不起作用,因为它将 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.
        }
    }

【问题讨论】:

    标签: swift realm realm-mobile-platform


    【解决方案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)
        }
    }
    

    我们正在探索使“预填充”同步领域变得更容易的方法,以便在未来发布领域。 :)

    【讨论】:

    • 哇,谢谢。预填充功能将是必须的,因为用户将节省 60 mb 的初始加载。
    • 它也是离线第一款应用的必备品(即不需要预先登录)
    • @TiM 相关 - 我是否必须始终使用使用同步配置初始化的领域才能同步数据?换句话说,我不应该使用默认领域?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多