【发布时间】:2012-06-14 00:57:24
【问题描述】:
不确定这是否是 Magical Record 保存方式的问题,或者我只是在某个地方犯了一个菜鸟错误。
我正在使用 NSFetchedResultController (FRC) 和 UITableView 来显示实体列表,当用户点击“添加”一个带有编辑器的新视图控制器时,会使用[MyEntity MR_createEntity] 创建一个新实体。用户可以在此处添加通过关系添加到主实体的其他实体。当用户在此视图控制器中点击“保存”时,上下文将使用 [[NSManagedObjectContext MR_contextForCurrentThread] MR_save] 保存
NSFetchedResultsController 似乎更新了,但是当我点击编辑实体时,没有任何子实体存在。调试似乎表明,即使实体已保存,FRC 仍然具有具有临时 ID 的实体。
我在 FRC controllerDidChangeContent 委托方法中做了一个幼稚的 [self.tableView reloadData]。
重新启动应用程序会加载正确的实体,并且子实体会在编辑器视图控制器中正确显示。
看起来 FRC 响应了“主线程”保存事件,但保存实际上发生在后台线程上,因此 FRC 看不到它。我已经检查过了,所有“我的”操作(设置 FRC、创建和获取实体)都发生在主线程上下文中。
我尝试在 MR_rootSavingContext 上侦听更改通知,并将它们与主线程上下文合并,这有点工作,但我最终在 FRC 中发现了重复行(一个是正确的“永久”实体,一个是临时实体) .
【问题讨论】:
标签: objective-c core-data nsfetchedresultscontroller magicalrecord