ios - 在应用程序生命周期的中间将本地 Realm 转换为同步 Realm (在 Swift 中

我的应用程序将具有称为多设备同步的付费功能。我想使用 Realm Cloud - 基于查询的同步来实现该功能。

我知道如何将本地 Realm 转换为同步 Realm 感谢 this thread .

但这是基于用户从应用程序开始同步他们的 Realm 的场景 - 在打开他们的非同步本地 Realm 之前。这对我不起作用,因为我的用户将在他们付费后开始同步。

因此,我必须在应用程序生命周期的中间转换他们的本地 Realm,而此时本地 Realm 已经打开。

我的问题在这里。当我尝试将本地 Realm 转换为同步 Realm 时,应用程序崩溃并显示以下消息:

Realm at path ‘…’ already opened with different read permissions.

我试图找到一种方法在转换之前关闭本地 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)
            }
        }
    }
}

任何帮助将不胜感激。 谢谢。

最佳答案

我复制了本地 Realm 文件并使用 RLMRealmConfiguration 打开了副本。之后,只需删除这两个文件。这不是最好的解决方案,但它有效

关于ios - 在应用程序生命周期的中间将本地 Realm 转换为同步 Realm (在 Swift 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56438304/

相关文章:

junit - 覆盖本地函数中的 Mockito 语句不适用于 PER CLASS 模式?

logging - 如何为 KTOR 添加日志拦截器?

spring-cloud - Spring Cloud Gateway 阻止路由发现请求

azure-ad-b2c - Azure AD B2C 中的自定义策略不允许为属性保存空字符串

reactjs - JWT LocalStorage 与 Cookie

python-3.x - 如何在 Visual Studio Code 中使用 activate.b

javascript - 如何在 Webpack 4 项目中导入自定义 UMD 模块

csv - 在 Java 中解析大型 CSV 文件的最快最有效的方法

ionic-framework - LocalStorage 中设置的键值可供其他应用程序访问

r - 如何更改 R 包的默认库路径