【问题标题】:Difference between getting an Object using FetchResultController and ManagedObjectContext使用 FetchResultController 和 ManagedObjectContext 获取对象的区别
【发布时间】:2010-03-30 20:36:01
【问题描述】:

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

【问题讨论】:

    标签: objective-c core-data nsfetchedresultscontroller nsmanagedobjectcontext


    【解决方案1】:

    使用NSFetchedResultsController 而不是仅仅使用NSFetchRequest 背后的意义在于监控您的数据以及使用部分时的便捷方法。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢。但是这两个方法返回的Array是一样的,不是吗??问题是关于它的:关于回报的差异。我询问后测试,我认为是。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 2010-12-17
      • 2011-10-07
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多