【问题标题】:"Core Data could not fulfill a fault" for objects that were not deleted未删除对象的“Core Data 无法完成故障”
【发布时间】:2013-11-15 05:59:05
【问题描述】:

对于应用程序的最近更新,我看到许多崩溃日志,其中包含核心数据无法完成错误的错误。但是在应用程序(启动或其他地方)中,我没有删除无法完成故障的对象,也不会级联删除它们。这个错误怎么会发生?有没有办法在实时应用中捕获并修复它?

是否也可能是您添加了对象但尚未正确保存对象?

【问题讨论】:

  • 您的应用是否使用获取结果控制器?如果是,您是否在创建过程中指定了任何缓存?
  • 你使用的是线程限制还是队列限制?这发生在相同的上下文还是不同的上下文中?您是否在任何时候调用 performBlockAndWait:?
  • @quellish 这发生在相同的上下文中。我不熟悉线程限制和队列限制,我会查一下。我正在执行嵌套块,并且在这些块中创建对象。
  • @Suhas 我正在使用获取的结果控制器。我没有在创建缓存时指定缓存。

标签: ios objective-c core-data crash fault


【解决方案1】:

可能是未“正确”保存的对象导致此行为。

一种方法是:

  • 在子上下文中插入对象
  • 获取该对象的永久 ID
  • 保存到父上下文
  • 在父上下文中获取对象
  • 刷新父上下文中的对象
  • 访问父上下文中的对象(完成该对象的错误)

编辑:

在单一上下文架构中达到此状态的另一种方法是:

  • 插入对象
  • 获取对象的永久 ID
  • 刷新对象
  • 尝试访问对象(触发对象故障)

刷新可能是获取的结果控制器对数据进行分页的结果,不一定是您的应用程序中“可见”的东西。

此外,还有一个 CoreData“错误”,它并不总是允许您在父子上下文架构中捕获此异常,但您可以尝试...

但是,如果这是您遇到的情况,那么这不是您的应用程序所期望的行为。您正在丢失添加到商店的新数据。

【讨论】:

  • 我认为这是正在发生的事情,但我不明白为什么,因为我在技术上只使用应用程序委托的托管对象上下文来保存对象。如何创建额外的上下文?
  • 我现在怎样才能回到用户的数据并将丢失上下文中创建的所有对象移动到父上下文?
  • 这种情况只发生在多上下文环境中。我添加了另一个场景,请参阅我的编辑。
  • @DanShelly 添加到您的答案中的另一个原因 - 由于合并冲突而在父上下文中保存失败。然后在刷新后尝试访问该对象。好玩好玩。
  • 你在你的区块中分配一个[[NSManagedObjectContext alloc] init...]吗?您是否在任何地方设置了父上下文?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多