gpt4 book ai didi

cocoa - 核心数据-existingObjectWithID :error: causes error 133000

转载 作者:行者123 更新时间:2023-12-03 16:00:40 27 4
gpt4 key购买 nike

我的应用程序使用 Core Data(在 Magical Record 的帮助下),并且使用 NSOperation 进行大量多线程处理。

当然,我非常小心地只在线程/操作之间传递 NSManagedObjectID

现在,为了返回操作中相应的托管对象,我使用 -existingObjectWithID:error: 因此:

Collection *owner = (Collection *)[localContext existingObjectWithID:self.containerId error:&error];

但我返回的是 nil,error 表示这是一个错误 #13300:NSManagedObjectReferentialIntegrityError

以下是文档中关于此错误的说明:

NSManagedObjectReferentialIntegrityError
Error code to denote an attempt to fire a fault pointing to an object that does not exist.
The store is accessible, but the object corresponding to the fault cannot be found.

在我的例子中这不是真的:该对象存在。事实上,如果我使用 NSFetchRequest 迭代该 Collection 实体的所有实例,我会在其中找到它,并且它的 NSManagedObjectID 正是那个我传递给 -existingObjectWithID:error:

此外,如果我使用 -objectWithID: ,我就能得到正确的对象。

所以我缺少一些东西。以下是一些额外的观察/问题:

  • “一个不存在的物体”:这句话中的“存在”是什么意思? “存在”在哪里?那时它肯定“存在”在我的核心数据存储中。
  • “找不到故障对应的对象”:这句话中的“找到”是什么意思? “发现”在哪里?那时它肯定会在我的核心数据存储中“找到”。

所以也许我遗漏了一些关于 existingObjectWithID:error: 的功能?文档说:

If there is a managed object with the given ID already registered in the context, that object is returned directly; otherwise the corresponding object is faulted into the context.
[...]
Unlike objectWithID:, this method never returns a fault.

这对我的问题没有帮助。我不介意让我的元素完全有缺陷,而不是有缺陷。事实上,当我访问对象属性时,其中的任何错误都会在下一个代码行中触发。

  • 导致 NSManagedObjectReferentialIntegrityError 的实际场景是什么?

感谢您的启发。

最佳答案

问题是您传递的 NSManagedObjectID 是临时的。您可以通过调用 NSManagedObjectID 的 isTemporaryID 方法来检查它。来自文档:

Returns a Boolean value that indicates whether the receiver is temporary.

Most object IDs return NO. New objects inserted into a managed object context are assigned a temporary ID which is replaced with a permanent one once the object gets saved to a persistent store.

您应该首先将更改保存到持久存储,然后才获取永久 ID 以传递到其他上下文。

关于cocoa - 核心数据-existingObjectWithID :error: causes error 133000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8637444/

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