我试图在我的ios应用中使用Realm Object Server。我在AWS上托管它,我可以成功地读取和写入它。但是,我在启动应用程序后访问同步域时遇到问题。在启动时,我有一个登录视图控制器(非常类似于示例应用程序中提供的控制器)
成功验证后,我想访问同步的Realm来决定要呈现哪个视图控制器。
@IBAction func logIn(sender: AnyObject?) {
guard userInputValid() else {
return
}
self.activityIndicator.startAnimating()
self.logInButton.isHidden = true
SyncUser.authenticate(with: Credential.usernamePassword(username: userNameTextField.text!, password: passwordTextField.text!, actions: []), server: syncAuthURL!, onCompletion: { user, error in
guard let user = user else {
self.presentError(error: error as! NSError)
self.activityIndicator.stopAnimating()
self.logInButton.isHidden = false
return
}
Realm.Configuration.defaultConfiguration = Realm.Configuration(
syncConfiguration: (user, self.syncServerURL!),
objectTypes: [Dot.self, Mod.self]
)
let realm = try! Realm()
// realm.objects(Dot.self).count == 0 here even though there is a Dot object persisted in the server
// When I access the realm later in the app (e.g in a viewDidAppear of another controller) the object is there
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let vc = DotCollectionViewController(nibName: "DotCollectionViewController", bundle: nil)
let navVC = UINavigationController(rootViewController: vc)
appDelegate.window?.rootViewController = navVC
})
}
我已经验证了对已同步的Realm的读取和写入,并发现了一些特殊的东西:即使我能够成功写入数据,该领域似乎也有一个nullUR的fileURL。我使用let realm = try! Realm()
在我的应用的其他部分访问领域,当我print(realm.configuration.fileURL)
时,即使对于有效的同步领域,我也总是为零。
所以我的问题是,我是否需要等待一段时间才能访问同步的Realm?如果是这样,我该怎么做呢?对此问题的任何帮助将不胜感激。
答案 0 :(得分:0)
预计已同步的Realm配置的fileURL
为nil
,因为文件位置是我的Realm管理的,用户(您)无法访问。< / p>
首次在设备上打开已同步的Realm时,只要SyncUser
回调提供有效的SyncUser.authenticate(...)
,就可以访问该域。但是,它的内容将以异步方式填充,这就是为什么realm.objects(Dot.self)
在立即打开Realm时为空,但稍后从服务器获取对象的原因。
如果在继续部分应用之前等待数据可用非常重要,那么Realm正在努力在不久的将来采用这两种方式: