[使用FetchResultController或ManagedObjectContext从核心数据中获取元素之间有什么区别?
1)FetchResultController
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext: managedObjectContext]];
NSSortDescriptor *sortDescriptorNameAscending = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorNameAscending,nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptorNameAscending release];
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Lists"];
2)ManagedObjectContext
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext]];
NSError *error = nil;
NSArray *items = [ managedObjectContext executeFetchRequest:request error:&error];
使用NSFetchedResultsController
而不是仅使用NSFetchRequest
的要点是监视数据以及使用节时的便捷方法。
[仅处理NSFetchRequest
时,您必须自己确定部分,并且需要在某些更改时重新获取数据。
[处理NSFetchedResultsController
时,它将确定您的部分,将结果缓存(几乎立即发出第二次对该数据的请求),并为您的NSTableView提供方便的方法。最后,当您的数据更改时,NSFetchedResultsController
将通过其委托通知您。
这两个内部的数据将是相同的。它正在管理差异的数据状态。
NSFetchedResultsController
对象将告诉您查询的对象何时更改。只需提供一个委托对象即可接收呼叫(请参阅NSFetchedResultsControllerDelegate
协议文档)。它还为您提供节管理,如果您想在表格视图中显示数据,这将很有用。