2

私は現在、NSFetchedResultsControllerから生成された注釈を持つマップ ビューを持つ CoreData ベースの iPhone アプリに取り組んでいます。マップ ビューのアイデアは、ユーザーのために保存された多数の場所を表示することです。

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 回の削除の更新を受け取った場合、これらをどの順序で処理する必要があるかということです。これらの indexPaths のいくつかには競合するインデックスがいくつかあり、それらが処理される順序は、移動、挿入、または削除する必要がある実際の注釈に影響を与えます。最初にすべての移動更新を実行すると、挿入インデックスにより、最初に挿入した場合の最終順序が最終順序とは異なります。

これらの更新メッセージが与えられた場合、更新前のインデックスのセットを更新後のインデックスのセットに変換する既存の小さなライブラリ/クラスはありますか? そうでない場合は、自分で書くことができるように、この機能がどのように機能するかを誰かが説明できますか?

どんな助けでも大歓迎です!

4

1 に答える 1

0

1 回の更新サイクルでの NSFetchedResultsControllerDelegate メソッドの流れは次のようになります。

  • controllerWillChangeContent: (一度呼び出されます)
  • controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: (X 回呼び出される)
  • controllerDidChangeContent: (一度呼び出されます)

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

セクションを使用している場合は、controller:didChangeSection:atIndex:forChangeType: への呼び出しを object changed 呼び出しと混合することもできます。

于 2012-05-23T19:30:11.983 に答える