Swift 3,Xcode 8,RealmSwift 2.0.2,Realm Object Server 1.0
在我的app委托中,我有一个函数可以设置我的Realm配置以连接到我设置的远程同步服务器。我只是使用测试帐户进行身份验证,直到我可以获得同步工作的基础知识。 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)!)
)
})
不是我的真实IP地址。 ;)
Realm()
这似乎工作正常。我看到数据出现在我的服务器上,我没有错误。 我的假设是,在此处设置Realm配置意味着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
如上面的代码注释中所述,{{1}}的两个实例是不同的。在我的一些视图控制器上,我可以将对象保存到服务器并看到它们出现在我的设备上。在其他视图控制器上,我没有看到任何数据,因为它使用了错误的Realm数据库。
难道我不能可靠地期望Realm配置在我的应用程序中持续存在吗?我是否需要做其他事情才能使用相同的配置?
答案 0 :(得分:1)
您在身份验证完成处理程序中设置默认配置。在用户通过身份验证后,将异步调用此回调。如果在回调运行之前恰好创建了一个视图控制器子类的实例,则它将在您在身份验证完成处理程序中进行的任何更改之前使用默认默认配置。 / p>