2

NSFetchedResultsController のインスタンスを使用せずに、iPhone アプリの Core Data をセットアップしました。

これを行うために、すべてのコア データ リクエストと NSFetchRequests/NSPredicates の構築をカプセル化するモデル クラスを作成しました。

これにより、すべての Core Data 固有のコードが UITableViewController から除外されました。

ここで、NSFetchedResultsController を追加して、セクション化された UITableView を簡単に設定できるようにします。

私の問題は次のとおりです。すべての例で、NSFetchedResultsController インスタンスが UITableViewController の ivar であることを確認しました。これにより、UITableViewController 内に構築されたすべての NSFetchedResults ステートメントが生成されます。

これはUITableViewControllerを混乱させ、別の責任を追加しているように感じます。

これにどのように対処しますか?

NSFetchedResultsController を使用すると、オブジェクト グラフはどのように見えますか?

NSPredicates はどこで作成しますか?

4

2 に答える 2

0

アップデート:

UITableViewControllers内でのNSFetchedResultsControllersの構築に戻りました。

NSManagedObjectContextのカテゴリもクエリに使用しています。さらに、NSmanagedObjectサブクラスのカテゴリ内により多くのロジックを配置しています。

全体として、私は最近使用しているアーキテクチャに満足しています。


元の回答:

私はその問題について私自身の見解を投稿すると思います。

NSFetchedResultsControllerはFoundationクラスであり、UIKitクラスではないため、モデルを叫びます。

NSFetchRequestについても同じです。

NSFetchRequestの構築は、データモデルの知識に依存しているようです。これは、UITableViewControllerが知識を持っていないはずだと主張することができます。

これは、オブジェクトグラフがどのように見えるべきかについてのいくつかのアイデアに私を導きました。

1つのオプションは、NSFetchedResultsControllerをサブクラス化することであり、makeはファクトリクラスのようなもので、完全に構成されたNSFetchedResultsControllerのインスタンスを返します。これにより、NSFetchRequestの構築が維持されます。

別のオプションは非常に似ていますが、NSFetchedResultsControllerをサブクラス化する代わりに、同じ作業を処理するNSObjectサブクラスまたはカテゴリーを作成します。

これらのオプションはどちらも、UITableViewControllerを使用してこれらのタスクを実行するよりもMVCに準拠しているようです。

于 2009-09-02T23:28:18.240 に答える
0

モデル クラスには、さまざまな種類の述語を返すメソッドがたくさんありますが、実際のNSFetchRequestandNSFetchedResultsControllerUITableViewControllerサブクラスで作成します。私がそのようにする理由は、ユーザーが含めたい基準についてオプションを設定できるためです。これは適切にビューコントローラー関連の項目であり、ビューコントローラーは に簡単にアクセスする必要がありますNSFetchedResultsController

ユーザーがこの問題について発言権を持っていない場合は、読み込み時にUITableViewControllerget aを取得するだけです。NSFetchedResultsController

于 2009-08-20T06:37:02.723 に答える