내 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
})
}
읽기 및 동기화 된 영역에 기록하고 독특한 무언가를 발견 : 나는 성공적으로 데이터를 기록 할 수있어 경우에도 영역이 null의 fileURL을 갖고있는 것 같아요. let realm = try! Realm()
을 사용하여 응용 프로그램의 다른 영역에서 영역에 액세스하고 print(realm.configuration.fileURL)
을 수행 할 때 유효한 동기화 된 영역에 대해서도 항상 0이됩니다.
제 질문은 동기화 된 영역에 액세스 할 수 있도록 일정 시간 동안 기다려야합니까? 그렇다면 어떻게해야할까요? 이 문제에 대한 도움을 많이 주시면 감사하겠습니다.
답장을 보내 주셔서 감사합니다. 그래서 내 애플 리케이션에서, 나는 동기화 된 영역을 기반으로하는 collectionview를로드하고있다. 영역이로드되기 전에 영역이 채워지기를 기다리는 가장 좋은 방법은 무엇입니까? 'Thread.sleep()'을 사용할 수는 있지만 분명히 해킹입니다. 타이머 작업을 지속적으로 UI 업데이트를 확인하고 싶지도 않습니다. – rparikh
동기화, 다른 프로세스 또는 다른 스레드에서 변경 사항이 들어오는 시점을 알려면 콜렉션 알림을 사용해야합니다. – jpsim
컬렉션 알림의 의미를 분명히 할 수 있습니까? – rparikh