1 つの完全な Core Data プロセスに 2 つの異なるフェッチ リクエストがあることに気付きました。
フェッチ リクエスト A : コンテキスト (MOC) インスタンスは、フェッチ リクエストを作成して実行する (executeFetchRequest) ことにより、ディスクからメモリにデータをフェッチします。
フェッチ要求 B : FRC インスタンスは別のフェッチ要求で初期化され、メモリからメモリ (コンテキストを指定) からデータをフェッチします。これは自動的に行われるため、このフェッチを「実行」する必要はありません。
フェッチ要求 A とフェッチ要求 B の接続
1.A と B のコンテキストは同じでなければならない
2.フェッチ B の結果は、フェッチ A の結果のサブセットです。
質問 私の理解が完全に正しいかどうか知りたいです。不正確な記述や誤解を指摘してください。ありがとう。
サンプルコード
Fetch A (明示的に実行): ディスクからメモリへ
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photo"];
request.predicate = [NSPredicate predicateWithFormat:@"unique = %@", [flickrInfo
objectForKey:FLICKR_PHOTO_ID]];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSError *error = nil;
// execute the fetch
NSArray *matches = [context executeFetchRequest:request error:&error];
Fetch B (自動): メモリからメモリへ
- (void)setupFetchedResultsController
{
NSFetchRequest *request =
[NSFetchRequest fetchRequestWithEntityName:@"Photo"];
request.sortDescriptors =
[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]];
request.predicate = [NSPredicate predicateWithFormat:@"whoTook.name = %@", self.photographer.name];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.photographer.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
}