少なくともいくつかのオプションがあります。
- 親ビュー コントローラーから子ビュー コントローラーにマネージド オブジェクト コントローラーへの参照を渡します。また、
- アプリのデリゲートから MOC プロパティを使用できるようにします。これは、任意のビュー コントローラーで使用できます。
ビューコントローラーを再利用して別の階層に再配置できるため、2番目のオプションを好む人もいます。MOC を親コントローラーと子コントローラーから切り離すことで、設計の柔軟性が少し向上します。また、アプリケーションが複数の永続ストアを同時に管理する必要がある場合、1 つの中央ポイントからアクセスして複数の MOC を作成すると、コードの複雑さが軽減されます。
ビュー コントローラーに MOC を配置したら、そのビュー コントローラーでフェッチ済み結果コントローラーを作成し、独自のスレッドで操作を適用できます。
編集
Site
と の間に1対多の関係があるようですPost
(つまり、1 つのサイト エンティティに多くの投稿エンティティがあります)。
「投稿」リスト ビュー コントローラーには、site
管理対象オブジェクト、siteID
管理対象オブジェクト ID、またはsiteName
文字列プロパティを含めることができます。
「Posts」リスト VC をプッシュするときは、そのsite
orsiteName
プロパティを設定し、それに応じてリクエスト述語を構成します。
たとえば、フェッチ リクエストの述語には次のようなものが含まれている必要があります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 ストアをフィルター処理しました。site
site
フェッチを実行すると、これらのエンティティは、特にフェッチされた結果コントローラを使用している場合は特に、データ ストアとして簡単に使用できるNSSet*
またはに常駐します。NSArray*
UITableView