Данные default.realm для синхронизации / облака области

Мое приложение типа Freemium, пользователи могут использовать приложение бесплатно, но только для автономного использования, и все данные хранятся в default.realm файл.

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

Что вызывает у меня проблему, когда пользователь заплатил за подписку, приложение будет выполнять sync.configuration к realm.Configuration, но как только это будет сделано, все данные, отображаемые в приложении, станут недоступны для просмотра, поскольку они изменились на.

Вопрос: как выполнить загрузку / запрос облака области для синхронизации всех данных в default.realm?

*** Конфигурация области ***

      class RealmManager {
    static let shared = RealmManager()
    let realmApp = App(id: "xxxxxxxxxx")
    
    lazy private var realmURL: URL = {
        return Realm.Configuration.defaultConfiguration.fileURL!
    }()
    
    lazy private var config:Realm.Configuration = {
        return Realm.Configuration(
        fileURL: self.realmURL,
        inMemoryIdentifier: nil,
        syncConfiguration: nil,
        encryptionKey: nil,
        readOnly: false,
        schemaVersion: 1,
        migrationBlock: nil,
        deleteRealmIfMigrationNeeded: false,
        shouldCompactOnLaunch: { totalByte, usedByte in
            let twentyMB = 20 * 1024 * 1024
            return (totalByte > twentyMB) && (Double(usedByte) / Double(totalByte)) < 0.6
        },
        objectTypes: nil
        )}()
    
    func realm(config:Realm.Configuration? = nil) -> Realm {
        let user = realmApp.currentUser
        var realm = try! Realm()
        
        if ((user?.isLoggedIn) != nil) {
            let partitionValue = user!.id

            if realm.objects(UserModel.self).first != nil
                && realm.objects(UserModel.self).first?.typeID == UserType.Premium.rawValue {
                print("online user with sync config")
                realm = try! Realm(configuration: (user?.configuration(partitionValue: partitionValue))!)
            } else {
                print("online user without sync config")
                realm = try! Realm(configuration: self.config)
            }
        }
        else {
            print("no sync config")
            realm = try! Realm(configuration: self.config)
        }
        return realm
    }
    
}
      /// InAppPurchase: User completed transaction, perform sync to realm cloud
let user = RealmManager().realmApp.currentUser
let configuration = user?.configuration(partitionValue: user?.id ?? "")
_ = RealmManager().realm(config: configuration)
                                
      This is the error Code i received after perform /// InAppPurchase: User completed transaction, perform sync to realm cloud


Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: 
Error Domain=io.realm Code=8 "Realm file is currently open in another process which cannot share access with this process. 
All processes sharing a single file must be the same architecture. 
For sharing files between the Realm Browser and an iOS simulator, 
this means that you must use a 64-bit simulator. 

0 ответов

Другие вопросы по тегам