不确定这是魔术记录保存方式的问题,还是我只是在某个地方犯了一个菜鸟错误.
我正在使用NSFetchedResultController(FRC)和UITableView来显示实体列表,当用户点击"添加"新的视图控制器时,推送编辑器,创建一个新的实体[MyEntity MR_createEntity].用户可以在此添加通过关系添加到主实体的其他实体.当用户点击此视图控制器中的"保存"时,将使用保存上下文[[NSManagedObjectContext MR_contextForCurrentThread] MR_save]
NSFetchedResultsController似乎更新,但是当我点击编辑实体时,没有任何子实体存在.调试似乎表明即使实体已被保存,FRC仍然具有带有临时ID的实体.
我[self.tableView reloadData]在FRC controllerDidChangeContent委托方法中做得很天真.
重新启动应用程序将加载正确的实体,并在编辑器视图控制器中正确显示子实体.
看起来FRC响应"主线程"保存事件,但保存实际上发生在后台线程上,因此FRC看不到它.我检查了所有"我的"操作(设置FRC,创建和获取实体)都发生在主线程上下文中.
我尝试在MR_rootSavingContext上侦听更改通知并将它们与主线程上下文合并,这种方式有效但我最终在FRC中有重复行(一个是正确的"永久"实体,一个是临时实体).
core-data objective-c nsfetchedresultscontroller magicalrecord