NSFetchedResultsControllerはおそらく必要ありません。結果コントローラーは通常、UITableViewControllerとともに、テーブルにデータを入力するためのヘルパーオブジェクトとして使用されます。
それが必要な場合は、続行します。ただし、コアデータコンテキストからエンティティを取得するだけの場合は、NSFetchRequestのみが必要です。Personというコアデータオブジェクトがあるとします。「ライアン」という名前のすべてのエンティティが必要だとしましょう
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
NSString *nameToGet = @"Ryan";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", nameToGet];
[fetch setPredicate:predicate];
NSError *error = nil;
NSArray *results = [[self managedObjectContext] executeFetchRequest:fetch error:&error];
if(results) {
NSLog(@"Entities with that name: %@", results);
for(Person *p in results) {
NSLog(@"person = %@", p);
}
return results;
} else {
NSLog(@"Error: %@", error);
}
return nil;
したがって、フェッチ要求を作成します。NSPredicateは、SQLステートメントのwhere条件に似ています。したがって、フォーマットを使用して述語を作成します(述語を作成するためのオプションはたくさんあります)。リクエストの述語を設定してから、managedObjectContextにフェッチリクエストを実行するように指示します。リクエストの結果はすべて、返された配列に含まれます。配列内のすべてのオブジェクトは、Person型のオブジェクトになります。
NSFetchedResultsControllerの使用を検討している場合、それは基本的に同じタイプのものです。ただし、不変の1つのフェッチ要求を使用してコントローラーを作成するため、コントローラーは常に同じデータを取得します。別のデータが必要な場合は、別のコントローラーを作成する必要があります。NSFetchRequestsだけに固執する場合(私はUIからデータレイヤーを分離しているので、コントローラーを使用することはあまり役に立ちません)、必要なデータをクエリして結果を返すことができます。