単純なテストプロジェクトにレルムオブジェクトサーバーを使用していますが、ROS接続セットアップの同期に問題があり、レルムオブジェクトの使用状況をフォローアップしてデータベースにアクセスしています。レルムオブジェクトを同期させるフォローアップレルムオブジェクトを使用してサーバー接続を完了
のviewDidLoad機能でvar realmRos: Realm!
override func viewDidLoad() {
connectROS()
if(FBSDKAccessToken.current() != nil){
// logged in
getFBUserData()
}else{
// not logged in
print("didLoad, FB user not logged in")
}
}
func connectROS() {
let username = "realm-admin"
let password = "*********"
SyncUser.logIn(with: .usernamePassword(username: username, password: password, register: false), server: URL(string: "http://146.185.154.***:9080")!)
{ user, error in
print("ROS: checking user credentials")
if let user = user {
print("ROS: user credentials OK")
DispatchQueue.main.async {
// Opening a remote Realm
print("ROS: entering dispatch Q main async")
let realmURL = URL(string: "realm://146.185.154.***:9080/~/***book_test1")!
let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: realmURL))
self.realmRos = try! Realm(configuration: config)
// Any changes made to this Realm will be synced across all devices!
}
} else if let error = error {
// handle error
print("ROS: user check FAIL")
fatalError(String(describing: error))
}
}
}
次のステップは、FBが(このケースでは、私はFB認証を使用しています)のユーザーをログイン得ることです: のviewDidLoadで私が呼んでいるconnectROSはrealmRosは/接続オブジェクトを初期化するために機能します。ログに記録されたFBユーザーがフェッチされた後、アプリケーション実行チェックでは、FBユーザーは自分のアプリケーションの新しいユーザーであり、私の独自のROSユーザーのテーブルです。
func checkForExistingProfile(user: User) -> Bool {
var userThatExist: User?
do {
try self.realmRos.write() {
userThatExist = self.realmRos.object(ofType: User.self, forPrimaryKey: user.userName)
}
} catch let error as NSError {
print("ROS is not connected")
print(error.localizedDescription)
}
if userThatExist != nil {
return true
} else {
return false
}
}
この時点でcheckForExistingProfileは、通常は(常にではない)ゼロであることを起こるトライself.realmRos.write()でクラッシュします。 問題は、connectROSの実行(非同期)とcheckForExistingProfile(connectROSが完了する前に実行される)の間の同期に起因すると思います。
おかげさまでオースチン –