Я пытаюсь использовать сервер объектов Realm в моем приложении ios. Я размещаю его на 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
})
}
Я подтверждено считывает и записывает в синхронизированных Realm и нашел что-то своеобразное: царство, кажется, есть fileURL нуль, даже когда я в состоянии записывать данные успешно. Я обращаюсь к области в других частях моего приложения, используя let realm = try! Realm()
, и когда я делаю print(realm.configuration.fileURL)
Я всегда получаю нуль даже для действительных синхронизированных областей.
Итак, мой вопрос: мне нужно подождать некоторое время для того, чтобы синхронизированное царство было доступно? Если да, то как мне это сделать? Любая помощь по этому вопросу будет высоко оценена.
Спасибо за ваш ответ. Поэтому в моем приложении я загружаю коллекцию, основанную на синхронизированной области. Каким будет лучший способ дождаться заполнения области перед загрузкой? Я могу использовать 'Thread.sleep()', но это взломать, очевидно. Я также не хочу, чтобы задача таймера постоянно проверяла обновления пользовательского интерфейса. – rparikh
Вы должны использовать уведомления о коллекциях, чтобы знать, когда происходят изменения, будь то синхронизация, другие процессы или другие потоки. – jpsim
Не могли бы вы уточнить, что вы подразумеваете под уведомлениями о коллекции? – rparikh