2013-07-05 119 views
1

我有一個NSFetchedResultsController綁定到我的主要託管對象上下文。它負責在我的主視圖中保存表視圖的數據。iOS5 NSFetchedResultsController沒有得到刪除更新

我有一個NSOperation在後臺線程上運行,刷新/刪除提取的結果控制器正在跟蹤的託管對象。我在nsoperation和insert/delete對象中創建了一個子上下文(private concurrency type/parent = main managed object context)。完成後,它將保存其上下文以及父上下文。

有趣和非常令人沮喪的是,這在iOS 6中工作正常。當我插入或刪除對象時,我的獲取結果控制器被通知更改並且所有事情都按預期工作。但是,在iOS 5上,除刪除以外的所有內容都可以使用。獲取的結果控制器沒有通知刪除。但是,如果我手動刷新抓取的結果控制器(使其爲零並重新獲取相同的謂詞),那麼它將顯示預期的結果。另外,當我在主要上下文中註冊更改/保存通知時,我可以看到用戶信息字典包含我已刪除的對象...即使在iOS 5中也是如此!

我認爲這可能是一個問題,但我認爲不適用,因爲我已經刪除了這些因素,是因爲這個對象與另一個對象存在多對一的關係。我正在刪除/插入的對象是「員工」,它與「部門」有關係。該員工設置爲無效,並且該部門設置爲級聯。

正如我所說的,這適用於iOS6,但不適用於iOS5。

任何提示將是非常有益的。

回答

1

此錯誤是由於保存到持久性存儲。這個子上下文自行保存,然後調用它的父主體,即主管理對象上下文執行阻塞。當主管理對象上下文保存時,它會觸發後臺上下文以寫入持久性存儲。當我刪除後臺上下文保存時,獲取的結果控制器按預期更新。

我發現可能導致這種情況的一件有趣事情是,每當我嘗試保存到商店時,託管對象都在泄漏。不完全確定如何解決這個問題,但很好理解它的原因。