gpt4 book ai didi

ios - 主线程上的“对象的持久存储不可访问...”

转载 作者:技术小花猫 更新时间:2023-10-29 11:13:08 25 4
gpt4 key购买 nike

我是众多遇到以下核心数据错误 (133000) 的人之一:

Object's persistent store is not reachable from this NSManagedObjectContext's coordinator

正如我在 SO 中看到的那样,这是因为 Core Data 的线程限制。
然而,我已经遵守了所有正确的线程限制,但这个错误仍然存​​在。

我使用以下代码创建一个 NSManagedObject 以在主线程上执行该功能:

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(commitPlayer:)
object:message];
[[NSOperationQueue mainQueue] addOperation:operation];
[operation release];

然后这个函数创建了对象,它非常高兴。
然后尝试使用 [objectContext existingObjectWithID:objectID error:&error] 获取对象返回 nil 并出现上述错误。

为了以防万一,我还用 @synchonized 互斥锁 block 包装了对象获取,但它仍然无法获取该对象。

似乎事先保存上下文可以解决此问题,但是我想获取对象,而不管它是否已保存,因为此时不应该保存数据库。

最佳答案

找到答案了。
问题与线程无关。这仅仅是因为已经发生了写入(因此人们通过奥卡姆 Razor 假设这是一个线程问题)。

显示此错误的真正原因与线程无关,就像互联网上说的那样,而是因为在您尝试另一个读/写的同时读/写已经在进行中。

[objectContext existingObjectWithID:objectID error:&error] 对数据库执行 I/O 以保证您返回的对象确实存在。 但是,在我的例子中,我已经在执行读取堆栈中的更高层

它试图读取 parent 的 child ,然后尝试读取每个 child 。事实上,我应该使用 [objectContext objectWithID:objectID] 来获取一个错误对象,然后在需要时执行适当的 I/O。

这不仅是正确的做事方式,而且当您只需要它们的列表时,它不会加载 500 亿个子实体,从而节省了内存。

希望这有助于为某人澄清事情!

关于ios - 主线程上的“对象的持久存储不可访问...”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12050324/

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