私は迅速を持っている(または一般にiOSの)問題の1つのエントリのフェッチ結果コントローラを使用する:CoreData
私のシナリオ:
私は他のものの間のアバターを(持っているテーブルを持っています)を各セルに格納します。各アバターには、プレゼンス(利用可能/利用不可)があります。各セル内の他のコンテンツのデータソースは、CoreDataによってサポートされていません(これは制限です)。アバターの写真と存在を提供するユーザとの関係はありません(は CoreData)。
私は自分のアバターをユーザーにしてユーザーの写真と存在を示すビューにしました。ユーザー(CoreDataにある)のプレゼンスが変更されると、アバターのプレゼンスインジケータを更新できるように、ビューに通知する必要があります。 (ここで私のコード構造について心配しないでください、私はMVCを使用していますが、私はシナリオの長い記述を避けるために事を単純化しました)。
私の質問:
はCoreDataで1つのエントリを観察するためにNSFetchedResultsController
(FRC)を使用することが悪いですか?これには他に適したものがありますか(NSFetchedResultsController
はテーブルビューには本当に適しています)?
基本的に私は、アバターにCoreDataでのユーザーの変更をリッスンするためにFRCを使用させることです。したがって、各セル内の各アバターは、1人のユーザを観察するFRCを有する。そういう形でFRCを使うのは奇妙に思えます。 (セルの再利用について心配しないでください。アバターがセルの再利用に処分されると、すべてのFRCも処分されます)。
その他のオプション:
私は、特定のユーザーへの変更をリッスンするために私のユーザーCoreDataストレージマネージャオブジェクトにオブザーバー(代理人)を設定できます(ストレージマネージャがCoreDataのエントリを更新するために使用されますCoreDataユーザエンティティへのすべての更新がそれを通過する)、オブザーバが変更を聞くと、そのユーザに関連付けられたデリゲート(アバタになる)に通知することができます。しかし、それは基本的に自分のFRCを作るようなものです。それは、しばしば私が思うように代理人を登録/登録解除しなければならないので、テーブル内のセルの再利用で複雑になる(各アバターはテーブル内のセルにあるので)。
私はユーザーのストレージのMOCで変更に関する通知(たとえばNSManagedObjectContextObjectsDidChange
)を聞くことができましたが、のユーザーはすべてのユーザーにフィルタを適用する必要があります。 FRCを再実装するのと似ているかもしれませんが、おそらくそれほど効率的ではないと思います。セルの再利用の複雑さにも遭遇するでしょう。
概要:
私は、データベース内の(ユーザーIDによって)一意のエントリへの変更をリッスンするための最良の方法についてのアドバイスをしたいです。 FRCが最善の方法ですか、それとも良い方法がありますか?