gpt4 book ai didi

iphone - "CoreData could not fulfill a fault"删除核心数据时出错

转载 作者:可可西里 更新时间:2023-11-01 05:06:36 26 4
gpt4 key购买 nike

这是我正在使用的导致问题的代码行:

[self.managedObjectContext deleteObject:object];

然后当它保存上下文时,它会导致崩溃:

Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault'

编辑:使用“-com.apple.CoreData.SQLDebug 1”运行代码。

CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: DELETE FROM ZENTRY WHERE Z_PK = ? AND Z_OPT = ?
CoreData: sql: COMMIT
CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZCREATIONDATE, t0.ZMESSAGE, t0.ZSECTIONIDENTIFIER, t0.ZVERSION FROM ZENTRY t0 WHERE t0.Z_PK = ?
CoreData: annotation: sql connection fetch time: 0.0042s
CoreData: annotation: total fetch execution time: 0.0096s for 0 rows.
CoreData: annotation: fault fulfilled from database for : 0x209010 <x-coredata://[edited out long code here]/Entry/p34>
*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault'

不确定这是否有助于找到问题所在?

最佳答案

我认为您需要为这个问题提供更多的“背景”。

但是,有几个地方可以查找您的问题。首先,您是否使用多个 ManagedObject Contexts?如果是这样,请确保 self.managedObjectContext 与 object.managedObjectContext 相同。

您是否使用多线程?如果是这样,那么您必须使用多个 MOC。确保您仅在“它的”线程上使用 MOC。

如果您正在使用包含策略,则意味着在您创建它的线程上使用 MOC。如果是其他两者之一,那么您应该在 performBlock 或 performBlockAndWait 中执行 MOC 代码。

获取正在保存的对象的对象 ID,并查看它是否在 SQL 文件中。

您可以打开核心数据 sql 调试标志(将“-com.apple.CoreData.SQLDebug 1”添加到方案中启动时传递的参数中)并在您的应用程序运行时观察 SQL 语句记录到控制台。它可以帮助您追踪真正发生的事情。

我认为现在就足够了......

编辑

一些其他调试内容...

根据上下文,转储所有关于状态的概念。插入/删除/注册/更新对象,propogatesDeletesAtaaendOfEvent,retainsRegisteredObjects,等等...

基本上,如果没有大量信息,这些类型的问题很难追踪,尤其是当您只使用一个线程和一个 MOC 时...因为大多数问题都是由使用多个 MOC 和/或线程引起的。

关于iphone - "CoreData could not fulfill a fault"删除核心数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232630/

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