0

この問題に関するガイダンスが必要です。CoreData と NSFetchController を使用するルート コントローラーを備えたナビゲーション コントローラーがあります。これで、ルート コントローラーは正常に動作します。アイテムをクリックすると、階層的に、前のルートコントローラーの行の値に関連付けられた次の UITable が表示されます。

さて、次の UITableViewController にプロパティとして何を渡す必要があるかわかりません。配列にする必要がありますか、それとも NSFetchedResultsController を渡す必要がありますか? 注意点として、階層には 2 番目の後に別のレベルがあります。

ありがとうドロン

4

1 に答える 1

3

少なくともいくつかのオプションがあります。

  1. 親ビュー コントローラーから子ビュー コントローラーにマネージド オブジェクト コントローラーへの参照を渡します。また、
  2. アプリのデリゲートから MOC プロパティを使用できるようにします。これは、任意のビュー コントローラーで使用できます。

ビューコントローラーを再利用して別の階層に再配置できるため、2番目のオプションを好む人もいます。MOC を親コントローラーと子コントローラーから切り離すことで、設計の柔軟性が少し向上します。また、アプリケーションが複数の永続ストアを同時に管理する必要がある場合、1 つの中央ポイントからアクセスして複数の MOC を作成すると、コードの複雑さが軽減されます。

ビュー コントローラーに MOC を配置したら、そのビュー コントローラーでフェッチ済み結果コントローラーを作成し、独自のスレッドで操作を適用できます。

編集

Siteと の間に1対多の関係があるようですPost(つまり、1 つのサイト エンティティに多くの投稿エンティティがあります)。

「投稿」リスト ビュー コントローラーには、site管理対象オブジェクト、siteID管理対象オブジェクト ID、またはsiteName文字列プロパティを含めることができます。

「Posts」リスト VC をプッシュするときは、そのsiteorsiteNameプロパティを設定し、それに応じてリクエスト述語を構成します。

たとえば、フェッチ リクエストの述語には次のようなものが含まれている必要がありますsite.name LIKE '%@'

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(site.name like '%@')", self.site.name]];
[fetchRequest setPredicate:requestPredicate];
// ...

または、管理対象オブジェクト IDで比較することもできます。これは、通常、一意の比較に適しています。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(site = %@)", self.siteID]];
[fetchRequest setPredicate:requestPredicate];
// ...

どちらの場合も、基準に相当する名前または管理対象オブジェクト IDPostを持つすべてのエンティティに一致するように Core Data ストアをフィルター処理しました。sitesite

フェッチを実行すると、これらのエンティティは、特にフェッチされた結果コントローラを使用している場合は特に、データ ストアとして簡単に使用できるNSSet*またはに常駐します。NSArray*UITableView

于 2009-12-21T04:30:29.523 に答える