9

我从文档和这个答案的理解是,如果数据存在,则 NSManagedObjectContextexistingObjectWithID:error:objectWithID:方法应该返回相同的对象,但是当数据不存在时,existingObjectWithID:error:将返回nil,而objectWithID:将返回一个有故障的对象而不是数据。

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

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

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


编辑:我想我可以使用(如此处所做的objectWithID:)替换伪造的对象,但 try-catch 在Objective-C,这似乎是一个非常糟糕的主意。nil

4

1 回答 1

1

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

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

于 2013-12-20T11:44:30.107 回答