私のアプリケーションでRealm Object Serverを使用しようとしています。私はAWSでそれをホストしています。私は正常に読み書きできます。しかし、私は、アプリケーションを起動した後、同期された領域にアクセスする際に問題が発生しています。打ち上げでは、私が正常に認証した後起動時に同期レルムが読み込まれない
(たとえば、アプリで提供するものに非常に似ている)、ログイン・ビュー・コントローラを持って、私が提示したビューコントローラを決定する同期レルムにアクセスしたいです。私が検証してい
@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
})
}
は読み込みと同期レルムへの書き込み、独特の何かを見つけた:私が正常にデータを書き込むことができるよ場合でも、レルムは、ヌルのfileURLを持っているようです。私はlet realm = try! Realm()
を使って私のアプリの他の部分の領域にアクセスしています。print(realm.configuration.fileURL)
を実行すると、有効な同期レルムについても常にゼロになります。
私の質問は、同期されたレルムがアクセス可能になるまでにある程度の時間をおかなければなりませんか?もしそうなら、私はこれをどうやってやりますか?この問題についての助けがあれば幸いです。
ご返信ありがとうございます。私のアプリでは、同期された領域に基づいてコレクションビューを読み込んでいます。レルムがロードされる前に移入するのを待つ最善の方法は何でしょうか?私は 'Thread.sleep()'を使うことができますが、それは明らかにハックです。また、タイマータスクで常にUIの更新をチェックしたくない場合もあります。 – rparikh
変更がかどうかの同期、他のプロセス、または他のスレッドから、来るときあなたが知っているコレクションの通知を使用する必要があります。あなたは、コレクションの通知によって何を意味するか – jpsim
を明確にもらえますか? – rparikh