如何为Realm设置默认的SyncConFiguration,因此我可以在没有冗余代码的情况下将其放在多个ViewCon



根据:

  • 适当的领域使用模式/最佳实践
  • 什么是在多种视图中保持同步活动的最佳实践或设计模式
  • 领域数据库Swift 3.1的设计模式-Singleton

我的方法就像:

appdelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    DispatchQueue.main.async {
        let username = "test@test.com"
        let password = "Test123"
        let serverUrl = URL(string: "http://test.com:9080")
        let realmUrl = URL(string: "realm://test.com:9080/~/realmtest")
        if let user = SyncUser.current {
            Realm.Configuration.defaultConfiguration.syncConfiguration = SyncConfiguration(user: user, realmURL: realmUrl!)
        } else {
            SyncUser.logIn(with: .usernamePassword(username: username, password: password, register: false), server: serverUrl!, onCompletion: { (user, error) in
                guard let user = user else {
                    print("Error: (String(describing: error?.localizedDescription))")
                    return
                }
                Realm.Configuration.defaultConfiguration.syncConfiguration = SyncConfiguration(user: user, realmURL: realmUrl!)
            })
        }
    }
    return true
}

viewcontroller.swift

override func viewDidLoad() {
    super.viewDidLoad()
    print("SyncConfiguration: (String(describing: Realm.Configuration.defaultConfiguration.syncConfiguration))")
    self.realm = try! Realm()
}

当我第一次打开应用程序时,什么也没发生,但是当我第二次打开应用程序时,领域工作正常。

每当我打开应用程序时,打印的SyncConfigurationnil。没有错误!

在这里和那里搜索,找不到答案...

问题在于您使用异步方法来配置领域,但是您不会在方法的完成处理程序中调用打印件。您只有在您的异步呼叫完成后才出示您的ViewContoller。

最新更新