Mar*_*cin 8 core-data objective-c nsfetchedresultscontroller magicalrecord
不确定这是魔术记录保存方式的问题,还是我只是在某个地方犯了一个菜鸟错误.
我正在使用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中有重复行(一个是正确的"永久"实体,一个是临时实体).
好吧,我不确定这是"正确的方法",但我发现如果我使用"inContext"版本在MR_rootSavingContext中创建我的NSFetchedResultsController而不是默认上下文,它可以正常工作MR_fetchAllSortedBy.
我想从FRC正在观看rootSavingContext而不是其中一个孩子的观点来看,这是有道理的.尽管如此,我还是会想,因为我在同一个线程上进行所有操作都不会成为问题.
更新:使用这种方法的唯一问题是,如果我只是使用实体来[frc objectAtIndexPath:]将其提供给编辑视图控制器,那么它就不再处于默认上下文中.通过使用NSManagedObjectContext在默认上下文中重新获取实体来解决此问题existingObjectWithID.仍然不是所有人都感觉很对,但它对我有用.
| 归档时间: |
|
| 查看次数: |
5760 次 |
| 最近记录: |