3 回答
TA贡献1998条经验 获得超6个赞
事实证明,更新对象NSManagedObjectContext没有主事件触发NSManagedObjectContextObjectsDidChangeNotification,因为故障对象未完成触发。
通用修复(或跟踪需要此处理的对象ID):
NSManagedObjectContext *context = [self managedObjectContext];
for(NSManagedObject *object in [[notification userInfo] objectForKey:NSUpdatedObjectsKey]) {
[[context objectWithID:[object objectID]] willAccessValueForKey:nil];
}
[context mergeChangesFromContextDidSaveNotification:notification];
从NSManagedObject类参考:
您可以使用键值nil调用此方法,以确保已引发故障,如以下示例所示。
TA贡献1784条经验 获得超9个赞
从另一个NSManagedObjectContext合并更改后,必须在Background-NSManagedObjectContext上调用processPendingChanges。
请参阅《 CoreData编程指南》:
请注意,更改通知是通过NSManagedObjectContext的processPendingChanges方法发送的。主线程与应用程序的事件周期绑定在一起,以便在主线程拥有的上下文中的每个用户事件发生后,自动调用processPendingChanges。后台线程不是这种情况-调用方法时取决于平台和发行版,因此您不应依赖特定的时间。如果辅助上下文不在主线程上,则应在适当的时候自己调用processPendingChanges。
TA贡献1828条经验 获得超6个赞
听起来好像您正在后台线程上进行合并。更改的合并需要在main / UI线程上完成,事件才能正确触发。但是,如果您使用父/子MOC,因为它们在内部处理这些通知,那么这没有什么意义。
- 3 回答
- 0 关注
- 435 浏览
添加回答
举报