非可选关系一对一无法保存,有时会出现1570错误

时间:2015-08-17 03:03:03

标签: ios core-data

我有Task和Person类。任务与Person一对一关系,这种关系称为"受让人"。我有两个类的NSManagedObject继承者。我正在获取Person的实例(借助NSFetchRequest),然后我创建了新的Task(使用NSEntityDescription),并且

task.assignee = person;
[context save:&error];

有时它可以节省,但大部分时间我都会收到“可可错误1570”这样的话说"受让人"是空的!

怎么可能?

  • 我在保存
  • 之前添加了assert(task.assignee)
  • 我检查[task validateForInsert:& error];和错误是空的!!
  • 我使用的是我之前获取Person的相同上下文
  • 没有人在后台接触它

最有趣的事情:当我检查"可选"在我的关系中,它的作用! 它可以保存正确的数据:与人交往。

这是一个错误还是什么?

1 个答案:

答案 0 :(得分:0)

看起来我做了一个愚蠢的线程错误。

我有NSPrivateQueueConcurrencyType的上下文,并使用从主线程获取的对象,这是不允许的(托管对象不是线程安全的)。我应该切换到NSMainQueueConcurrencyType或使用managedObjectID从不同的上下文(在正确的线程上)重新获取对象。