2016-11-16 5 views
0

Realm 2.0.4, 3.0.1 Swift, Xcode 8.1Realm Swift 2.0.4 Краш после Логин()

Я получаю следующий крах после использования SyncUser.logIn() метода:

libC++ abi.dylib: завершение с неперехваченным исключением типа realm :: IncorrectThreadException: Realm доступ из неправильного потока.

Я ничего не делаю с отдельными нитями (что я знаю), кроме использования 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

Смежные вопросы