2016-06-08 54 views
0

我使用RealmSwiftAsyncDisplayKit,我得到這個錯誤所有的時間從ASDataController.mm境界在AsyncDisplayKit導致終端 - 境界:: IncorrectThreadException

libc++abi.dylib: terminating with uncaught exception of type realm::IncorrectThreadException: Realm accessed from incorrect thread. 

我有一個DataSourceManager類,它包含的數據,以及處理fetchinsert操作的DatabaseManager

例外總是發生在_layoutNodesFromContexts:ofKind:completion:。 我已經嘗試過我知道的任何GCD組合(串行,併發,屏障),但我無法處理這個異常。

我該如何處理這種情況?

謝謝!

+0

所以你試過'dispatch_sync(dispatch_get_main_queue()...'?(只是爲了確保) – Fonix

+0

@Fonix我做到了,但'AsyncDisplayKit'不'main_queue'做佈局。謎是我不知道'_layoutNodesFromContexts:ofKind:completion:'在哪個隊列中運行。 – Alireza

+0

使用CoreData臨時修復! – Alireza

回答

0

我試過Unmanaged_RLMObject作爲解決方法。 Unmanaged_RLMObject是沒有添加到RLMRealm的RLMObject。

它的工作原理,但我不認爲這是很好的解決方案。

RLMObjects的非託管實例的行爲與普通的NSObject 子類一樣,並且可以安全地跨線程傳遞。

Source

0

這可能是因爲AsyncDisplayKit(或Texture現在)運行了多個後臺線程,和你的境界對象被線程之間傳來傳去。這就是爲什麼IncorrectThreadException

要在線程之間傳遞領域對象,請使用ThreadSafeReference,以及使用realm.resolve來訪問AsyncDisplayKit中的對象。

More info here.