2012-04-30 63 views
2

我目前正在使用基於CoreData的iPhone應用程序,其地圖視圖的註釋將從NSFetchedResultsController生成。地圖視圖的想法是它將顯示用戶的多個保存位置。如何處理自定義結果視圖的NSFetchedResultsControllerDelegate更新

使用NSFetchedResultsController的好處之一是,我可以將我的地圖視圖設置爲NSFetchedResultsController上的代理,並獲得有關在用戶發生的另一設備或網站上發生的保存位置集的任何更改的通知已登錄。

我現在有一點麻煩我圍繞如何應對許多不同類型的更新發送到我的NSFetchedResultsControllerDelegate實施的頭。該文檔:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/Reference/Reference.html似乎並沒有告訴你如何處理這些不同的更新,因爲它似乎更適合與大多數工作的UITableView集成。

我保留了我的註釋的NSDictionary,它們將它們映射到結果集內的NSIndexPath。問題是,例如,當我收到10個移動,3個插入和4個刪除更新時,我應該如何處理這些更新?其中一些indexPaths會有許多衝突的索引,它們的處理順序將影響我需要移動,插入或刪除的實際註釋。如果我首先執行所有移動更新,那麼如果我先插入,則插入索引將導致最終訂單與最終訂單不同。

是否存在任何現有的小型庫/類,它們會在更新之前將一組索引轉換爲給定那些更新消息的一組更新後索引?如果沒有,任何人都可以解釋這個東西是如何工作的,所以我可以自己寫?

任何幫助將不勝感激!

回答

0

的NSFetchedResultsControllerDelegate方法用於一個更新週期的流量是這樣的:

  • controllerWillChangeContent:(稱爲一次)
  • 控制器:didChangeObject:atIndexPath:forChangeType:newIndexPath:(稱爲X次)
  • controllerDidChangeContent :(調用一次)

對didChangeObject方法的每次調用都只是一個object/indexPath。您應該按照您通過調用didChangeObject來接收它們的順序應用這些更改。這將使他們保持一致。

如果您正在使用節,您也可以調用控制器:didChangeSection:atIndex:forChangeType:與對象更改的調用混合。

相關問題