Realm Swift 2.0.4在logIn()之后崩溃

时间:2016-11-16 04:45:55

标签: realm

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 Breakpoint

奇怪的是,在Xcode中重建我的应用程序后,它运行起来并且不再崩溃。它以某种方式与logIn相关。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我终于明白了!我必须将logIn()闭包的全部内容包装在主线程队列中,如下所示:

SyncUser.logIn(with: signUpCredentials, server: serverURL) { user, error in
  DispatchQueue.main.async{  
    if user == nil {
      //Error
    }else{
      //Success
      setupRealm(user: user!)
    }
  }
}

我希望这有助于其他人。