领域之间切换(iOS / Swift 3)

时间:2017-02-11 05:24:13

标签: ios swift swift3 realm

我尝试登录或注册用户并将其连接到现有领域。然后,根据存储在该领域的信息,我可能需要它们来连接到不同的领域。

不可能尝试!最初配置后具有不同配置的领域?气馁了吗?是否需要在最初的DispatchQueue之外完成?

以下是代码:

SyncUser.logIn(with: usernameCredentials, server: URL(string: "http://11.22.333.0:9080")!) {
     user, error in
     guard let user = user else {
         fatalError(String(describing: error))
     }

     DispatchQueue.main.async {
         let configuration = Realm.Configuration(
             syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://11.22.333.0:9080/ab56realmURL/NameOfRealm1")!)
         )
         self.realm = try! Realm(configuration: configuration)

         if (someCheckOfData in realm) {
              let configuration2 = Realm.Configuration(
                  syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://11.22.333.0:9080/ab56realmURL/NameOfRealm2")!)
              )
              self.realm = try! Realm(configuration: configuration2)
         }
      }
}

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

不,不气馁。您在此处所做的只是创建Configuration的2个离散副本,然后在您的服务器上创建2个单独的Realm实例。

这两者将完全分开,因此在用于创建初始Realm实例后,错误地更改配置不会导致异常。

我们建议的一件事是不要像这样持有特定的Realm引用。它们不是线程安全的,并且GCD不能保证在相同的线程上执行相同的队列,因此您可能会为将来的异常做好准备。

如果这将成为您的主要领域,通常建议将Configuration设置为默认领域。否则,由于Configuration是线程安全的(假设您以后不对其进行修改),您可以保留它,并在实际需要使用Realm时将其用于try! Realm(configuruation:)