Преобразование локальной области в синхронизированную область в середине жизненного цикла приложения (в Swift) - PullRequest
0 голосов
/ 04 июня 2019

Мое приложение будет иметь платную функцию, называемую синхронизацией нескольких устройств. Я хотел бы реализовать эту функцию с помощью Realm Cloud - Query Based Sync.

Я знаю, как преобразовать локальную область в синхронизированную область благодаря эта тема .

Но это основано на сценарии, согласно которому пользователи синхронизируют свое Царство с самого начала приложения - перед открытием несинхронизированного локального. Это не работает для меня, потому что мои пользователи начнут синхронизацию, когда заплатят за это.

Поэтому я должен преобразовать их локальное Царство в середине жизненного цикла приложения, и к этому времени локальное Царство уже открыто.

Моя проблема возникает здесь. Когда я пытаюсь преобразовать локальную область в синхронизированную, происходит сбой приложения с таким сообщением:

Область по пути ‘…’ уже открыта с разными разрешениями на чтение.

Я пытался найти способ закрыть локальное Царство перед его преобразованием, но какао Царства не позволяет мне программно закрыть Царство.

Вот мой код, преобразовывающий локальную область в синхронизированную область.

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)
            }
        }
    }
}

Любая помощь будет оценена. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...