Realm 2.0.4,Swift 3.0.1,Xcode 8.1
使用SyncUser.logIn()
方法后,我收到了以下崩溃:
libc ++ abi.dylib:以未捕获的类型异常终止 realm :: IncorrectThreadException:从错误的线程访问的域。
除了使用SyncUser.logIn()
方法之外,我没有对单独的线程(我知道)做任何事情:
//AuthForm.swift
let signUpCredentials = SyncCredentials.usernamePassword(username: ..., password: ..., register: true)
SyncUser.logIn(with: signUpCredentials, server: serverURL) { user, error in
if user == nil {
//Error
}else{
//Success
setupRealm(user: user!)
}
}
//In another Swift file...
func setupRealm(user: SyncUser){
// Create the configuration
Realm.Configuration.defaultConfiguration = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: realmURL))
// Open the Realm
_ = try! Realm()
}
当我的应用加载并尝试首次使用Realm时,会发生崩溃。我的假设是,使用默认配置设置的域与访问的域不同。
附件是崩溃前的断点。我为所有异常设置了断点,但崩溃只是将我指向我的App Delegate顶部。
奇怪的是,在Xcode中重建我的应用程序后,它运行起来并且不再崩溃。它以某种方式与logIn
相关。有什么想法吗?
答案 0 :(得分:0)
我终于明白了!我必须将logIn()
闭包的全部内容包装在主线程队列中,如下所示:
SyncUser.logIn(with: signUpCredentials, server: serverURL) { user, error in
DispatchQueue.main.async{
if user == nil {
//Error
}else{
//Success
setupRealm(user: user!)
}
}
}
我希望这有助于其他人。