gpt4 book ai didi

ios5 - 现有ObjectWithID :error: returns nil,但objectWithID:返回一个实际可用的对象

转载 作者:行者123 更新时间:2023-12-02 22:18:56 25 4
gpt4 key购买 nike

我对文档和 this answer 的理解就是如果数据存在,NSManagedObjectContext 的 existingObjectWithID:error:objectWithID: 方法应该返回相同的对象,但是当数据不存在时,existingObjectWithID: error: 将返回 nil,而 objectWithID: 将返回有错误的对象而不是数据。

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

我对这两种方法的理解是否错误?我做错了什么吗?

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

<小时/>

编辑:我想我可以使用objectWithID:,然后立即测试访问 try-catch block 中返回对象的属性,捕获抛出的异常,并用 nil 替换伪造的对象( as is done here ),但 try-catch 在 Objective-C 中代价高昂,这似乎是一个非常糟糕的主意。

最佳答案

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

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

关于ios5 - 现有ObjectWithID :error: returns nil,但objectWithID:返回一个实际可用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12503545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com