将本地域转换为同步域

时间:2018-04-21 16:49:11

标签: swift realm

我想将本地域数据库转换为同步数据库以允许用户身份验证。我使用swift并没有包含在文档中,但是,我发现了这种方法,但它一直给SIGABRT例外,我不知道什么是问题。

这是我在App Delegate中添加的内容:

import UIKit
import RealmSwift
import Realm
import Realm.Dynamic


@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {


    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        let sourceFilePath = Bundle.main.url(forResource: "fieldFlow", withExtension: "realm")
        let configuration = RLMRealmConfiguration()
        configuration.fileURL = sourceFilePath
        configuration.dynamic = true
        configuration.readOnly = true
        let localRealm = try! RLMRealm(configuration: configuration)

        let creds = SyncCredentials.usernamePassword(username: "admin@realm.io", password: "password")
        SyncUser.logIn(with: creds, server: URL(string: "http://localhost:9080")!) { (syncUser, error) in
            DispatchQueue.main.async {
                if let syncUser = syncUser {
                    self.copyToSyncRealmWithRealm(realm: localRealm, user: syncUser)
                }
            }
        }

        let config = Realm.Configuration(
            // Set the new schema version. This must be greater than the previously used
            // version (if you've never set a schema version before, the version is 0).
            schemaVersion: 1,
            // Set the block which will be called automatically when opening a Realm with
            // a schema version lower than the one set above
            migrationBlock: { migration, oldSchemaVersion in
                // We haven’t migrated anything yet, so oldSchemaVersion == 0
                if (oldSchemaVersion < 1) {
                    // Nothing to do!
                    // Realm will automatically detect new properties and removed properties
                    // And will update the schema on disk automatically



                }



        })

        // Tell Realm to use this new configuration object for the default Realm
        Realm.Configuration.defaultConfiguration = config

        // Now that we've told Realm how to handle the schema change, opening the file
        // will automatically perform the migration
        let realm = try! Realm()

        // Override point for customization after application launch.
        return true
    }

    func copyToSyncRealmWithRealm(realm: RLMRealm, user: RLMSyncUser) {
        let syncConfig = RLMRealmConfiguration()
        syncConfig.syncConfiguration = RLMSyncConfiguration(user: user, realmURL: URL(string: "realm://localhost:9080/~/fieldRow")!)
        syncConfig.customSchema = realm.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 = realm.allObjects(schema.className)
                for i in 0..<allObjects.count {
                    let object = allObjects[i]
                    RLMCreateObjectInRealmWithValue(syncRealm, schema.className, object, true)
                }
            }
        }
    }

0 个答案:

没有答案