1

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

2 回答 2

1

使用 aNSFetchedResultsController而不是仅仅使用 a 的重点NSFetchRequest在于监控数据和使用部分时的便捷方法。

仅处理 a 时,NSFetchRequest您必须自己确定部分,并且在发生变化时需要重新获取数据。

在处理 . 时NSFetchedResultsController,它将确定您的部分,缓存结果(对该数据进行第二次请求几乎是瞬时的),并为您的 NSTableView 提供方便的方法。最后,当您的数据发生更改时,NSFetchedResultsController将通过其代表通知您。

这两者的内部数据将是相同的。不同之处在于管理该数据的状态。

于 2010-03-31T14:52:27.117 回答
0

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

于 2010-03-31T07:15:56.380 回答