Мое приложение будет иметь платную функцию, называемую синхронизацией нескольких устройств. Я хотел бы реализовать эту функцию с помощью 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)
}
}
}
}
Любая помощь будет оценена.
Спасибо.