在UIManagedDocument MOC的子MOC中获取对象,to-many关系为空

时间:2011-11-16 04:44:39

标签: iphone core-data ios5 nsmanagedobjectcontext

我的应用使用UIManagedDocument来处理Core Data的数据。 2个实体之间存在多对多的关系:Post和Tag。

当我想编辑帖子时,我创建一个临时NSManagedObjectContext,将其parentContext设置为UIManagedDocument的managedObjectContext,并使用objectWithID:方法检索帖子。

我们假设:

  • MOC1是UIManagedDocument的NSManagedObjectContext
  • MOC2是编辑帖子的临时NSManagedObjectContext
  • post1是MOC1中的帖子
  • post2是MOC2中的帖子

问题在于:

  • post1.tags返回2个标签
  • post2.tags返回0个标签

正确检索所有post2属性,但多对多关系标记除外。

为什么post2.tags没有标签?

2 个答案:

答案 0 :(得分:2)

经过进一步测试,我认为这与临时和永久物体ID有关;如果我们看到同样的事情,那么我会猜测MOC1中多对多关系返回的对象将具有临时的而非永久的ID。

据推测,在MOC2中,您正在进行一些插入以在多对多关系中创建对象。当您完成插入并在保存之前,获取通过[[moc2 insertedObjects] allObjects]插入的对象数组。使用跟踪数组将此数组移交给[moc2 obtainPermanentIDsForObjects:error]。然后在MOC2上调用save。

这似乎对我有用。看来默认情况下,在MOC2上调用save实际上并不会导致在MOC1中创建永久对象ID。

答案 1 :(得分:0)

我希望我能得到答案,但就我能够确定而言,这是一个错误。在这种情况下,To-many关系检索似乎根本不起作用。

坦率地说,似乎有点难以相信这会逃脱测试,但我完全无法以任何方式完成这项工作。