我已经尝试解决这个问题两天了。当我尝试保存时,我不断收到错误消息。
//self.data is NSManagedObject. kAppDelegate.moc is the managed object context.
self.data = [NSEntityDescription insertNewObjectForEntityForName:@"Data"
inManagedObjectContext:kAppDelegate.moc];
[self.data setValue:[NSNumber numberWithBool:NO] forKey:@"isit"];
[self.data setValue:@"" forKey:@"name"];
NSError *error;
if(![self.data.managedObjectContext save:&error])
{
NSLog(@"Save did not complete successfully. Error: %@",
[error localizedDescription]);
}
当我运行它时,控制台中会出现以下内容:
“CoreData:错误:从上下文中删除托管对象 0x10935d4c0 (0x10935d420) 后对其进行更改。”
和这个:
保存未成功完成。错误:(空)
我不明白为什么会发生这种情况,或者为什么错误是“null”。
鉴于此错误:
2015-07-06 06:15:05.124 xxx[3609:796500] CoreData: 错误:从上下文中删除托管对象 0x17423d3e0 (0x1740d0450) 后对其进行更改。
Found:
就我而言;初始化序列的踪迹(使用断点和日志消息 class_initial:%B:%H)透露我创建了两次上下文。我的解决方案是简单地将多余的调用重定向到 self.managementObjectContext。稍后我可能会花一些时间来追踪并消除冗余逻辑。
初步结果:
- d: init(模型名称:):1
- mext: findInStore(_:):1
- mext: findInStore(_:sortDescriptors:谓词:):1
- 下一个: NSManagedObject:1
- d:上下文数据存储:1
- d:持久存储协调员:1
- d:托管对象模型:1
- d:应用程序文档目录:1
- mext: createInStore(_:):1
- 下一个: NSManagedObject:2
- d:上下文数据存储:2
最终结果
- db: init(模型名称:数据库名称:):1
- d: init(模型名称:):1
- mext: findInStore(_:):1
- mext: findInStore(_:sortDescriptors:谓词:):1
- 下一个: NSManagedObject:1
- d:托管对象上下文 托管对象上下文:1
- d:持久存储协调员:1
- d:托管对象模型:1
- d:应用程序文档目录:1
推荐:
对于遇到此问题的其他人,我建议仔细检查核心数据堆栈的初始化序列。上下文可能会创建两次,或者托管对象可能会被删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)