The documentation says:如何從NSFetchedResultsControllerDelegate實現延遲/批處理表視圖更新?
您應仔細考慮是否要爲每一個做出改變來更新表視圖。如果同時進行大量修改 - 例如,如果您正在從後臺線程/.../中讀取數據,則只需實現controllerDidChangeContent :(在處理完所有待處理更改後發送給委託)到重新加載表格視圖。
這正是我在做什麼:我在處理具有不同ManagedObjectContext後臺線程傳入的變化,以及合併結果與mergeChangesFromContextDidSaveNotification主線程MOC :.到現在爲止還挺好。
我選擇不執行controller:didChangeObject:...,而是想要執行文檔建議的批處理更新。
問題/問題:文檔沒有詳細說明如何實際實現批量更新?我應該只是在controllerDidChangeContent中調用[tableview reloadData]:還是有一種不太乾擾的方式可以讓我完全重新加載?
想到我有:我可以注意到mergeChangesFrom ...包含更改的對象的通知,找出它們的索引路徑,並調用tableview:ReloadRowsAtIndexPaths:爲他們。但是有沒有權威的信息,建議或例子?或者只是[tableview reloadData]? (另:控制器:didChangeObject:...當它接收到一組批處理更新時開始表現得非常不正常,即使同樣的更新代碼[我現在放在後臺線程中]在它運行之前很好主線程,但當然鎖定用戶界面。)
嘆息......如果這就是它的原因:( – Jaanus 2010-02-02 10:04:30
)reloadData是一個很好的解決方案,當被改變的對象數量很大的時候,但是你怎麼知道呢?在我的情況下,我想能夠知道有多少變化已被檢測到,以便我可以決定是否需要完整的reloadData或流暢的動畫更新 – 2011-09-09 14:15:26
@DirtyHenry我已經添加了用於處理動畫更新的鍋爐板代碼,我想NSFetchedResultsController會在調用這些方法之後你可以在你的管理對象上下文中調用'save',因此,在調用'save'之前,你應該看到有多少記錄被改變了,如果超過了你的閾值,只需在controllerDidChangeContent中調用'reloadData'而不是'endUpdates'返回其他委託方法的頂部)。 – gerry3 2011-09-23 22:13:11