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

问题描述 投票:1回答:2

[使用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]; 
objective-c core-data nsfetchedresultscontroller nsmanagedobjectcontext
2个回答
1
投票

使用NSFetchedResultsController而不是仅使用NSFetchRequest的要点是监视数据以及使用节时的便捷方法。

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

[处理NSFetchedResultsController时,它将确定您的部分,将结果缓存(几乎立即发出第二次对该数据的请求),并为您的NSTableView提供方便的方法。最后,当您的数据更改时,NSFetchedResultsController将通过其委托通知您。

这两个内部的数据将是相同的。它正在管理差异的数据状态。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.