2016-11-16 58 views
0

境界2.0.4,3.0.1斯威夫特,Xcode的8.1 ​​境界斯威夫特2.0.4崩潰之後登錄()

我使用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() 
} 

崩潰,那麼發生在我的應用程序加載並嘗試使用境界第一次。我的假設是,使用默認配置設置的領域與訪問的領域不同。

附加是崩潰前的斷點。我有一個爲所有異常設置的斷點,但崩潰只是將我指向我的App Delegate的頂部。

Xcode Breakpoint

奇怪的是,在Xcode重建我的應用程序後,它的工作原理了,不能再崩潰。它與logIn有某種關係。有任何想法嗎?

回答

0

我終於明白了!我不得不包裹logIn()關閉的全部內容在這樣的主線程隊列:

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

我希望這可以幫助別人。

+1

對不起,你遇到了這個問題。我們將在未來版本中更新我們的文檔和/或更改此API的工作方式,以避免混淆。 – AustinZ