2012-04-30 4 views
2

現在、CoreDataベースのiPhoneアプリケーションのマップビューで、NSFetchedResultsControllerからアノテーションを生成しています。マップビューのアイデアは、ユーザーに保存された場所の数が表示されることです。カスタム結果ビューのNSFetchedResultsControllerDelegateの更新を処理するには

NSFetchedResultsControllerを使用する利点の1つは、マップビューをNSFetchedResultsControllerの代理人として設定して、別のデバイスまたはWebサイトで発生した保存された場所のセットに加えられた変更をユーザーに通知できるようにすることです

私は現在、NSFetchedResultsControllerDelegateの実装に送信されるさまざまな種類のアップデートを処理する方法について、私の頭の中で悩んでいます。ドキュメント:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/Reference/Reference.htmlは、ほとんどの作業を行うUITableViewとの統合に向けて、これらの異なるアップデートをどのように扱うべきかを教えてくれないようです。

私は結果セット内のNSIndexPathにマップするアノテーションのNSDictionaryを保持しています。問題は、たとえば、10回の移動、3回の挿入、4回の削除の更新を受け取ったときに、どのような順序で処理する必要がありますか?これらのindexPathにはいくつかの競合するインデックスがあり、処理される順序は移動、挿入、削除する必要のある実際の注釈に影響します。すべての移動の更新を最初に実行すると、最初に挿入した場合、挿入インデックスによって最終的な順序が最終的な順序と異なることになります。

更新前の一連のインデックスを、更新メッセージが与えられた一連の更新後のインデックスに変換する既存の小さなライブラリ/クラスはありますか?もしそうでなければ、誰もこの作品の仕組みを説明できるので、自分で書くことができますか?

ご協力いただきますようお願い申し上げます。

答えて

0

1つの更新サイクルのNSFetchedResultsControllerDelegate方法の流れは次のようである:

  • controllerWillChangeContent:(一度呼ばれる)
  • コントローラ:didChangeObject:atIndexPath:forChangeType:newIndexPath:(X倍と呼ばれる)
  • controllerDidChangeContent:(一度呼び出された)

didChangeObjectメソッドの呼び出しは、たった1つのオブジェクト/ indexPathになります。変更内容は、didChangeObjectの呼び出しを介して受け取った順序で適用する必要があります。それはそれらを一貫して保つでしょう。

セクションを使用している場合、コントローラ:didChangeSection:atIndex:forChangeType:オブジェクトの変更された呼び出しと混在していることもあります。

関連する問題