2014-10-09 54 views
0

我有我認爲是一個有點典型的問題,我刪除和更新後臺線程上的CoreData數據,而當UITableView呈現CoreData對象的先前獲取數組時,I得到:問題重現CoreData'不能履行故障'崩潰

"NSObjectInaccessibleException CoreData could not fulfill a fault for" 

我讀了一堆建議如何可能解決它,但之前,我去盲目添加代碼,我想先重現該問題。

對於我的測試用例,我有三個步驟。

  1. 從CoreData
  2. 創建一個後臺線程獲取項目。在新線程中創建長循環(可能是100次迭代),其中數據庫被擦除並重新加載,就像在崩潰中一樣。後臺線程創建一個新的NSManagedObjectContext,但與主要上下文共享PersistantStore。
  3. 將主UI線程發送到一個無限循環(> 10,000次迭代),該循環不斷從主上下文中獲取新項目,然後遍歷獲取的對象。我也試過這個測試,只是迭代原始列表的獲取對象而不重新獲取。

我期望這個測試用例會導致NSObjectInaccessibleException錯誤,但一切正常,我無法重現崩潰。在審查我的代碼和不能重現此錯誤之間,我覺得我正在做的一切正確。然而,不知何故,在這個瘋狂的情況下,這個崩潰顯現

關於如何重新創建此次崩潰的任何想法?

回答

0
  1. 似乎這發生在保存後臺上下文但等待主線程與主上下文或合併進程合併時發生。因此,嘗試在主線程中並行添加更多內容,以增加保存和合並之間的時間。
  2. 在Crashlytics中,我們也得到了這個問題(前1),並且幾乎總是發生在[NSFetchedResultsController(PrivateMethods)_managedObjectContextDidChange:]的私有方法中。 (這條線在日誌中間...)。因此,嘗試添加/刪除與TableView + NSFetchedResultsController關聯的對象。 +更多reloadData在這裏。
+0

好主意。我會盡量大幅增加至少一個因素保存的記錄數量。 – dirkoneill 2014-10-10 05:07:13

+0

我已經添加了多達100,000條記錄被刪除並保存,同時我重新加載包含原始數據的UITableVIew。我似乎無法再現這次崩潰,但它仍然出現在Crashlytics中。 – dirkoneill 2014-11-11 21:34:40