gpt4 book ai didi

ios - 我可以安全地将 'CoreData could not fulfill a fault' 错误包装在 @try catch block 中吗

转载 作者:可可西里 更新时间:2023-11-01 03:37:52 24 4
gpt4 key购买 nike

我理解为什么会发生此错误:当您尝试访问在另一个线程的托管对象上下文中删除的 CoreData 对象时,该对象因此被设置为“故障”对象,因此任何保留的引用将不再指向到一个有效的 CoreData 对象。

我正在使用 NSFetchedResultsController。

我已确认所有代码均已正确实现。我有 2 个托管对象上下文,一个用于 BG 线程,一个用于主线程。

我已经确认主线程订阅了 NSManagedObjectContextDidSaveNotification 下的通知。

我已经确认,当此通知触发时,我会在主线程管理的对象上下文中执行 mergeChangesFromContextDidSaveNotification:。

我没有在任何地方保留这些对象,但我正在为 NSFetchRequest 设置批处理大小(这可能是问题所在吗?)

然而,我仍然偶尔会收到“CoreData 无法完成故障”错误。

在我的特定应用程序中,这通常发生在某种“数据绑定(bind)”过程中,因此我可以安全地丢弃故障对象并继续前进。我想通过将数据绑定(bind)的循环内部包装在 @try-catch block 中并跳过我收到 CoreData 错误的行来做到这一点。

我可以安全地使用 CoreData 执行此操作吗?还是遇到故障后需要完全转储托管对象上下文。

我确实检查了这个关于 how to check if a CoreData object is a fault 的问题,如果我不能安全地假设我的 @try-catch block 不会导致其他问题,这可能是我实现的。

最佳答案

我们可以使用“existingOjectWithId”来代替 try-catch,并检查返回的对象是否为 nil。

- (NSManagedObject*)existingObjectWithID:(NSManagedObjectID*)objectID error:(NSError**)error 

如果指定 ID 的对象已经在上下文中注册,则以上方法返回该对象,或者将对象错误放入上下文中。 如果无法获取对象、对象不存在或无法出错,则返回 nil。与 -objectWithID 不同:它从不返回错误。

关于ios - 我可以安全地将 'CoreData could not fulfill a fault' 错误包装在 @try catch block 中吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14590974/

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