不同的领域configuration出现在Swift应用程序中

Swift 3,Xcode 8,RealmSwift 2.0.2,Realm Object Server 1.0

在我的应用程序委托中,我有一个函数将我的Realmconfiguration设置为连接到我设置的远程同步服务器。 我只是使用testing帐户进行身份validation,直到我可以获得同步工作的基础知识。 1.1.1.1不是我的真实IP地址。 ;)

 let username = "test" let password = "test" let address = "http://1.1.1.1:9080" let syncAddress = "realm://1.1.1.1:9080/~/myapp" SyncUser.authenticate(with: Credential.usernamePassword(username: username, password: password, actions: []), server: URL(string: address)!, onCompletion: { user, error in guard let user = user else { fatalError(String(describing: error)) } // Open Realm Realm.Configuration.defaultConfiguration = Realm.Configuration( syncConfiguration: (user, URL(string: syncAddress)!) ) }) 

这似乎工作正常。 我看到数据显示在我的服务器上,我没有得到任何的错误。 我的假设是在这里设置Realmconfiguration意味着Realm()所有实例都将使用这个configuration。

然后我在两个独立的视图控制器中将realm对象设置为类属性:

 class TableViewControllerA: UITableViewController{ let realm = try! Realm() override func viewDidLoad() { // CORRECT: Prints "nil" as it should for a remotely synced Realm instance print(realm.configuration.fileURL) } } 

…和另一个文件中的另一个:

 class ViewControllerB: UIViewController{ let realm = try! Realm() override func viewDidLoad() { // WRONG: Prints the path to the local realm file in the Simulator print(realm.configuration.fileURL) } } 

正如上面的代码注释中所指出的那样,这两个realm实例是不同的。 在我的一些视图控制器上,我可以保存对象到服务器,并看到它们出现在我的设备上。 在其他视图控制器上,我没有看到任何数据,因为它使用了错误的Realm数据库。

难道我不能可靠地期望一个领域configuration持续在我的应用程序? 我是否需要做其他的事情来使用相同的configuration?

您正在设置身份validation完成处理程序中的默认configuration。 这个callback在用户被authentication之后被asynchronous地调用。 如果在callback运行之前碰巧创build了其中一个视图控制器子类的实例,那么在您的身份validation完成处理程序中进行的任何更改之前,它将打开的Realm将使用默认的默认configuration。