我注意到在一个完整的核心数据进程中有两个不同的获取请求。
获取请求 A:上下文 (MOC) 实例通过创建获取请求并执行它 (executeFetchRequest) 将数据从磁盘获取到内存。
获取请求 B:FRC 实例与另一个获取请求一起初始化,从内存(指定上下文)获取数据到内存,这是自动发生的,因此无需“执行”此获取。
Fetch 请求 A 和 Fetch 请求 B 之间的连接
1.A和B的上下文必须相同
2.fetch B的结果是fetch A结果的子集
问题 我想知道我的理解是否绝对正确。请指出任何不准确的陈述和误解。谢谢。
示例代码
获取 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];
获取 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];
}