簡體   English   中英

在應用程序生命周期的中間將本地 Realm 轉換為同步 Realm(在 Swift 中)

[英]Converting local Realm to synced Realm in the middle of app life cycle (in Swift)

我的應用程序將具有稱為多設備同步的付費功能。 我想使用 Realm Cloud - 基於查詢的同步來實現該功能。

由於這個線程,我知道如何將本地領域轉換為同步領域。

但這是基於用戶從應用程序開始同步他們的 Realm 的場景 - 在打開他們的非同步本地 Realm 之前。 這對我不起作用,因為我的用戶會在付費后開始同步。

因此,我必須在應用程序生命周期的中間轉換他們的本地 Realm,並且到那時本地 Realm 已經打開。

我的問題出現在這里。 當我嘗試將本地領域轉換為同步領域時,應用程序崩潰並顯示以下消息:

路徑 '...' 處的領域已經以不同的讀取權限打開。

我試圖在轉換之前找到一種關閉本地 Realm 的方法,但是 Realm cocoa 不允許我以編程方式關閉 Realm。

這是我將本地 Realm 轉換為同步 Realm 的代碼。

func copyLocalRealmToSyncedRealm(user: RLMSyncUser) {

    let localConfig = RLMRealmConfiguration()
    localConfig.fileURL = Realm.Configuration.defaultConfiguration.fileURL
    localConfig.dynamic = true
    localConfig.readOnly = true

    // crashes here
    let localRealm = try! RLMRealm(configuration: localConfig)

    let syncConfig = RLMRealmConfiguration()
    syncConfig.syncConfiguration = RLMSyncConfiguration(user: user,
                                                        realmURL: realmURL,
                                                        isPartial: true,
                                                        urlPrefix: nil,
                                                        stopPolicy: .liveIndefinitely,
                                                        enableSSLValidation: true,
                                                        certificatePath: nil)
    syncConfig.customSchema = localRealm.schema

    let syncRealm = try! RLMRealm(configuration: syncConfig)
    syncRealm.schema = syncConfig.customSchema!
    try! syncRealm.transaction {
        let objectSchema = syncConfig.customSchema!.objectSchema
        for schema in objectSchema {
            let allObjects = localRealm.allObjects(schema.className)
            for i in 0..<allObjects.count {
                let object = allObjects[i]
                RLMCreateObjectInRealmWithValue(syncRealm, schema.className, object, true)
            }
        }
    }
}

任何幫助將不勝感激。 謝謝。

我制作了本地領域文件的副本,並使用 RLMRealmConfiguration 打開了副本。 之后,只需刪除這兩個文件。 這不是最好的解決方案,但它有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM