2017-02-11 95 views
1

我正在尝试登录或注册一个用户并将它们连接到现有的领域。然后,根据存储在该领域的信息,我可能需要它们连接到不同的领域。在领域之间切换(iOS/Swift 3)

是不是可以尝试!在最初配置完成后具有不同配置的领域?它气馁了吗?它是否需要在最初的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) 
     } 
     } 
} 

非常感谢您的帮助!

回答

2

不,它并不气馁。你在这里所做的就是创建2个独立的Configuration副本,然后在服务器上创建2个独立的Realm实例。

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

我们所推荐的一件事,虽然没有坚持特定的领域引用。它们不是线程安全的,并且GCD不保证在相同的线程上执行相同的队列,因此您可能正在设置自己的未来异常。

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

+0

感谢您的回答!用这段代码我已经朝着自己的目标迈进了。它的哪一部分保持特定的Realm参考?主要Realm设置为默认配置的含义是什么?我只尝试!领域(配置:)当用户第一次登录/注册或当我需要切换到不同的领域。之后,我只是使用尝试! itemName.realm?.write {进行更改,并通过notificationToken接收更新,以了解它们连接到的Realm的任何更改。一旦我将self.realm设置为配置2,我最初连接到的领域被覆盖,对吧? – RanLearns

+0

@RanLearns不用担心!如果这解决了您的问题,请不要忘记将其标记为已接受的答案。 :)当你将一个属性添加到名为'realm'的类中,并且你手动设置'self.realm = realm'时,这就是我的意思是挂在一个引用上。通过主Realm,我的意思是如果你不想每次都使用'Realm(configuration:)',你可以将'Realm.Configuration.defaultConfiguration'设置为当你调用'Realm()'时返回的Realm。 – TiM

+0

啊好的!不,它不会被覆盖。它将作为用户帐户中的单独条目存在。 – TiM