【发布时间】:2014-03-10 00:51:02
【问题描述】:
问题:
我正在阅读 Tim Roadley 的“Learning Core Data of iOS”。我不明白为什么作者在从 fetched results controller 检索托管对象时会采取额外的、看似多余的步骤。
NSManagedObjectID *itemId = [[self.fetchedResultsController objectAtIndex:indexPath] objectID];
// Item is a NSManagedObject subclass
Item *item = (Item *)[self.fetchedResultsController.managedObjectContext existingObjectWithID:itemId error:nil];
// gets and sets item's attributes…
这不是很奇怪吗?为什么要麻烦使用objectID 和existingObjectWithID:error: 方法而不是只使用获取结果控制器的objectAtIndexPath: 方法来检索项目对象?
我做了什么来尝试理解:
(1.) 我在整本书的电子版中搜索了existingObjectWithID:error: 方法。该方法在整本书中都有使用,但我找不到对其用法的解释。
(2.) 我在 existingObjectWithID:error: 上阅读了 Apple 文档
如果已经在上下文中注册了具有给定 ID 的托管对象,则直接返回该对象;否则相应的对象将错误地进入上下文。如果数据未缓存,此方法可能会执行 I/O。与 objectWithID: 不同,此方法从不返回错误。
对象可能“错误进入上下文”,但方法“从不返回错误”。这不矛盾吗?可以说文档并没有帮助我解决这个问题。
(3.) 我想了一天,还是没有顿悟。但是,我怀疑答案与后台保存有关,稍后将添加到本书的演示应用程序中。
【问题讨论】:
标签: ios core-data ios7 nsfetchedresultscontroller