existingObjectWithID:error:返回nil,但objectWithID:返回实际可用对象

Isa*_*aac 9 core-data nsmanagedobjectcontext ios5

我从文档和这个答案中的理解是,如果数据存在,NSManagedObjectContext existingObjectWithID:error:objectWithID:方法应返回相同的对象,但是当数据不存在时,existingObjectWithID:error:将返回nil同时objectWithID:返回具有错误而不是数据的对象.

我在应用程序中看到的是一个实例,其中(在子管理对象上下文中的后台线程上创建对象并保存,然后转到主线程,保存并将对象ID从子上下文带到父对象上下文),existingObjectWithID:error:返回nil,但objectWithID:返回具有有效数据的实际可用对象,而不是故障.

我对这两种方法的理解不正确吗?难道我做错了什么?

(我想要nil返回-when-there-no-data行为existingObjectWithID:error:,但是无法获取新创建的对象的数据是有问题的.)


编辑:我想我可以使用objectWithID:,然后立即测试访问try-catch块中返回对象的属性,捕获抛出的异常,并替换伪造的对象nil(如此处所做),但try-catch是昂贵的Objective-C这似乎是一个非常糟糕的主意.

eof*_*ter 3

问题可能出在临时对象 ID 上。对象 ID 在保存到存储之前不是永久的。所以问题是何时从子上下文中的托管对象获取对象 ID:在保存父级之前还是之后。

\n\n

如果您在保存父级之前执行此操作(反过来,如果父级配置了持久存储协调器而不是另一个父级,则会导致保存到存储),那么您可能会获得临时对象 ID。由于 Apple 未向我们披露的某些原因,从对象 ID 返回托管对象的方法之一可以工作,但另一种则不能\xe2\x80\x99t。

\n