使用FetchResultController和ManagedObjectContext获取对象之间的区别

时间:2010-03-30 20:36:02

标签: objective-c core-data nsfetchedresultscontroller nsmanagedobjectcontext

使用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]; 

2 个答案:

答案 0 :(得分:1)

使用NSFetchedResultsController而不仅仅是NSFetchRequest背后的一点是在处理部分时监控数据和便捷方法。

当只处理NSFetchRequest时,您必须自己确定这些部分,并在需要更改时重新获取数据。

在处理NSFetchedResultsController时,它将确定您的部分,缓存结果(在瞬时附近发出对该数据的第二次请求),并为您的NSTableView提供便利方法。最后,当您的数据发生变化时,NSFetchedResultsController会通过其代理通知您。

这两者内部的数据将是相同的。它正在管理那些不同的数据状态。

答案 1 :(得分:0)

NSFetchedResultsController对象会告诉您查询对象何时发生更改。只需提供一个委托对象来接收调用(请参阅NSFetchedResultsControllerDelegate协议的文档)。 它还为您提供了部分管理,如果您想在表格视图中显示数据,这将非常有用。