试图保存NSManagedObjectContext无法正常工作

use*_*270 7 core-data nsmanagedobjectcontext ios

我一直试图找出这个问题2天了.我试图保存时不断收到错误.

//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]);
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它出现在控制台中:

"CoreData:错误:将托管对象0x10935d4c0(0x10935d420)从其上下文中删除后进行变更."

还有这个:

保存未成功完成.错误:(null)

我无法弄清楚为什么会发生这种情况,或者为什么错误是"空".

Tom*_* C. 3

鉴于此错误:

2015-07-06 06:15:05.124 xxx[3609:796500] CoreData: 错误:从上下文中删除托管对象 0x17423d3e0 (0x1740d0450) 后对其进行更改。

成立:

就我而言;初始化序列的跟踪(使用断点和日志消息 class_initial:%B:%H)显示我创建了两次上下文。我的解决方案是简单地将冗余调用重定向到 self.managementObjectContext。稍后我可能会花一些时间来追踪并消除冗余逻辑。

初步结果:

  1. d: init(模型名称:):1
  2. mext: findInStore(_:):1
  3. mext: findInStore(_:sortDescriptors:谓词:):1
  4. 下一个: NSManagedObject:1
  5. d:上下文数据存储:1
  6. d:持久存储协调员:1
  7. d:托管对象模型:1
  8. d:应用程序文档目录:1
  9. mext: createInStore(_:):1
  10. 下一个: NSManagedObject:2
  11. d:上下文数据存储:2

最终结果

  1. db: init(模型名称:数据库名称:):1
  2. d: init(模型名称:):1
  3. mext: findInStore(_:):1
  4. mext: findInStore(_:sortDescriptors:谓词:):1
  5. 下一个: NSManagedObject:1
  6. d:托管对象上下文 托管对象上下文:1
  7. d:持久存储协调员:1
  8. d:托管对象模型:1
  9. d:应用程序文档目录:1

推荐:

对于遇到此问题的其他人,我建议仔细检查核心数据堆栈的初始化序列。上下文可能会创建两次,或者托管对象可能会被删除。