所以有很多相同的問題,但他們都沒有幫助我,這就是爲什麼我再次問同樣的問題, 所以我得到這個異常,而訪問一個RealmObject的數組。當我檢查類似的問題和領域的官方網站,我在每一個問題如何處理從不正確的線程訪問的領域?
領域對象不是線程安全的,並且不能跨線程共享,所以你必須在每個線程/調度隊列得到一個領域實例類似的事情發現你想讀或寫的。
所以我所做的是我訪問它
這裏的一些片斷之前創建的境界的新實例:
let realm = try! Realm()
try! realm.write {
realm.add(saveUserCredentials, update: true)
}
我每次訪問的境界之前創建一個新的實例,像我在說以上
仍然我得到了同樣的錯誤,然後我試圖訪問我的領域實例只有MainThread,我做了這樣的事情:
if Thread.isMainThread{
let realm = try! Realm()
try! realm.write {
realm.add(saveUserCredentials, update: true)
}
}else{
DispatchQueue.main.async {
let realm = try! Realm()
try! realm.write {
realm.add(saveUserCredentials, update: true)
}
}}
還是我得到了同樣的錯誤
fatal error: unexpectedly found nil while unwrapping an Optional value libc++abi.dylib: terminating with uncaught exception of type realm::IncorrectThreadException: Realm accessed from incorrect thread. (lldb)
,我敢肯定我在做什麼是不這樣做的正確方法,併發生了誤差,不是經常, 1的10倍
任何人都可以指出我正要做些什麼來處理這個異常?
是'saveUserCredentials'一個託管對象嗎?它獲得了什麼樣的線程? – EpicPandaForce
@EpicPandaForce你的意思是託管對象?並不清楚在哪個線程獲取,因爲我調用這個方法'saveUserCredentials()',基本上創建這個'saveUserCredentials'對象,我在執行一些異步任務後調用我的方法(他們正在執行一些網絡請求) –
託管對象意味着它已被添加到Realm併成爲託管代理。然後它被綁定到你添加它的領域被打開的線程。您可能想嘗試將'saveUserCredentials'包裝到'ThreadSafeReference'中,儘管這個錯誤可能更爲重要。 – EpicPandaForce