使用FetchResultController或ManagedObjectContext从Core Data获取元素之间有什么区别?
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];
答案 0 :(得分:1)
使用NSFetchedResultsController
而不仅仅是NSFetchRequest
背后的一点是在处理部分时监控数据和便捷方法。
当只处理NSFetchRequest
时,您必须自己确定这些部分,并在需要更改时重新获取数据。
在处理NSFetchedResultsController
时,它将确定您的部分,缓存结果(在瞬时附近发出对该数据的第二次请求),并为您的NSTableView提供便利方法。最后,当您的数据发生变化时,NSFetchedResultsController
会通过其代理通知您。
这两者内部的数据将是相同的。它正在管理那些不同的数据状态。
答案 1 :(得分:0)
NSFetchedResultsController
对象会告诉您查询对象何时发生更改。只需提供一个委托对象来接收调用(请参阅NSFetchedResultsControllerDelegate
协议的文档)。
它还为您提供了部分管理,如果您想在表格视图中显示数据,这将非常有用。