3

のアップルのドキュメントによるとNSFetchedResultsController

フェッチされた結果コントローラーを使用して、Core Data フェッチ要求から返された結果を効率的に管理し、UITableView オブジェクトにデータを提供します。

のドキュメントによるとNSManagedObjectContext

その主な役割は、管理対象オブジェクトのコレクションを管理することです。

この 2 つのクラスの目的は重複しているようです。どちらも「取得した管理対象オブジェクトを管理」します。言葉遣いの違いは確かに何かを意味しているのかもしれませんが、私には理解できません。両方のドキュメントを読んだ後、すべてのデータのフェッチ、変更、コミット、元に戻す/やり直しなどがマネージド コンテキストによって処理されるように思えます。nsfrc が存在するという意味がわかりません。

データを処理するためのコンテキストを既に管理しているのに、フェッチされた結果コントローラーが必要な理由を誰か説明できますか?

4

3 に答える 3

4

ANSFetchedResultsControllerには a への参照がありNSManagedObjectContextます。

FRC には、MOC からすべてのオブジェクトを取得し、指定した基準に従って並べ替える責任があります。

FRC は、特定の MOC のオブジェクトを操作するためのユーティリティ クラスです。

例えば All People with firstName is 'John', sorted by lastName

FRC によって参照される MOC に新しい人物を追加する必要がある場合はfirstName = 'John'、フェッチされた結果コントローラーがそれを処理し、デリゲート コールバックを送信します。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    //do some stuff 
}

NSManagedObjectContextバケツ一杯です。これNSFetchedResultsControllerは、そのバケットから特定のものを選ぶ 1 つの方法です。

于 2012-08-01T11:06:45.287 に答える
4

これNSManagedObjectContextは Core Data の基本的な概念であり、リレーショナル データのトランザクションに似ています。オブジェクトをフェッチできるだけでなく、オブジェクトを作成、更新、削除したり、永続ストアに保存したりできます。

は必要ありませんNSFetchedResultsController。これは、テーブル ビューで簡単に使用できる形式で Core Data オブジェクトを提供するように設計されたユーティリティ クラスです。で使用されるフェッチされたオブジェクトは、NSFetchedResultsControllerによって管理されますNSManagedObjectContext

そうは言っても、「ユーティリティクラス」は真剣に安売りしています。基になるデータ ソースの更新、挿入、削除、キャッシュ、セクションなど、手動で処理するのが面倒な作業を自動的に管理します。

于 2012-08-01T11:48:39.760 に答える
1

フェッチされた結果コントローラーは、テーブル ビューを自動的に更新できるように、セットをフェッチして変更を監視するだけです。NSFetchedResultsController実際に直接変更することはありません。これは、コンテキスト (変更を行う場所) と結果セットにリンクされています。

于 2012-07-31T23:41:01.097 に答える