-existingObjectWithID:error:
和–objectWithID:
之间有什么区别?
答案 0 :(得分:6)
我相信existingObjectWithID:error:
只有在已经在接收上下文中注册的情况下才返回实例。 objectWithID:
可能会为尚未注册(拉入)接收上下文的对象返回错误。
答案 1 :(得分:6)
objectWithID:
假设对象存在,因此如果您给它一个错误的ID,当您尝试访问返回实体上的属性时,它将引发异常。此外,此方法始终返回实体。
existingObjectWithID:error:
将返回一个对象,如果不存在则返回nil
。如果出现错误,它将填充错误指针。
答案 2 :(得分:-1)
existingObjectWithID:error:
将返回对象(如果已注册) - 也就是说,它已在此NSManagedObjectContext
中创建,或已被提取(或使用objectWithID:
检索)。否则它将返回nil
。此方法无法找到数据存储区中但从未被此上下文检索的托管对象。如果此方法获取了错误的id或已删除的对象的id,则永远不会抛出异常。
数据存储区中但尚未检索到的托管对象可能会被objectWithID:
出现故障 - 现在它将被注册并可以访问。如果objectID错误或者对象已被删除,则会引发异常。
重要的是要注意第一次保存时对象id 会改变(从临时ID到永久ID),所以不要期望创建一个对象,保持对它的原始ID,然后保存后使用该ID检索它。您可以致电isTemporaryID
以查明保存后对象ID是否会发生变化。