gpt4 book ai didi

ios - CoreData 的 performBlock : and faulting

转载 作者:行者123 更新时间:2023-11-29 13:00:21 24 4
gpt4 key购买 nike

我正在使用 performBlock: 和 performBlockAndWait: 方法在我的上下文中的只读数据库上执行获取请求(它与我的应用程序打包在一起,因此从未写入)。

我是否也应该将每个 NSManagedObject 访问器包装在 performBlockAndWait: 中? - 那会很乱。当 CoreData 的私有(private)队列正在使用 performBlock 执行时,当 CoreData 出现一对多关系时,我目前会崩溃:

类似于:

NSManagedObject* alreadyFetchedObject = ...;
NSArray* alreadyFetchedObject.otherObjects; // Crashes here on main thread (no performBlock wrapped around accessing otherObjects)

.

[context performBlockAndWait:^{
// Currently executing here on CoreData's own queue
result = [context executeFetchRequest:fetchRequest error:nil];
}];

最佳答案

当然可以。也许除了与在主线程上执行的上下文相关联的托管对象之外。但为了清楚起见,我总是将访问包装到 performBlock: 中。小心 performBlockAndWait: - 这很容易导致死锁。

此外,当您有这样的语句时:

NSManagedObject* alreadyFetchedObject = ...;

和访问alreadyFetchedObject之后,需要保证对应的managed object context仍然存在。因此,始终使用 performBlock:performBlockAndWait: 访问托管对象会提醒您不要意外删除上下文 ;)

关于ios - CoreData 的 performBlock : and faulting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19925316/

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