【问题标题】:CoreData: error: NULL _cd_rawData but the object is not being turned into a faultCoreData: 错误: NULL _cd_rawData 但对象没有变成故障
【发布时间】:2012-03-02 18:15:42
【问题描述】:

保存到核心数据时,我偶尔会收到此错误。我无法重新创建它。

有没有人遇到过这个错误;

CoreData: error: NULL _cd_rawData but the object is not being turned into a fault

?

【问题讨论】:

  • 你在使用多线程吗?如果是,请确保应在主线程上完成保存上下文
  • 是的,我是。但我在另一个上下文中工作并合并主线程中的更改。
  • 嗨,谁能解释一下为什么这个错误只是偶尔发生?
  • 作为了解更多有关该主题和防止此类问题的方法的一般方法,我推荐以下斯坦福讲座:youtube.com/watch?v=whF63GTaW1w

标签: iphone core-data


【解决方案1】:

原因:

当对象的上下文不属于当前线程时会发生这种情况。错误可以通过多种方式表现出来。

调试:

当崩溃发生时,请执行以下操作:

  1. 检查发生崩溃的线程(Xcode > Debug Navigator)
  2. 在控制台打印上,NSManagedObjectContext 的并发类型
  3. 如果并发类型是mainQueueConcurrencyType,那么它需要在主线程上,否则在后台线程上。

检查并发类型的控制台命令:

p context.concurrencyType

在上面的示例命令中,NSManagedObjectContext 存储在变量 context

控制台输出:

(NSManagedObjectContextConcurrencyType) $R4 = mainQueueConcurrencyType

【讨论】:

  • 是的,这正是我的情况。这个错误基本上是因为从后台线程访问主MOC。
  • 有解决办法吗?
  • 如果您需要从后台线程访问数据库,使用该线程创建一个新的 MOC,然后使用它来创建、查询、变异、保存等。MagicalRecord 非常有帮助我的应用程序。
  • 在我的情况下,它已经在后台线程上,但是从后台线程频繁切换到主线程会导致此错误和崩溃
【解决方案2】:

【讨论】:

  • 链接不再活跃,解决方案不可见!
  • 答案已编辑以放置指向相同内容的活动链接。
【解决方案3】:

当我尝试从其他线程(不是主线程)中的 Coredata Store 读取(访问)数据时,我发现了同样的问题。

您可以通过以下链接中的建议解决此问题:
Core Data and threads / Grand Central Dispatch

【讨论】:

  • 该线程有 6 个答案;您能否更具体地说明您在该主题中发现的有用的内容?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2011-08-01
  • 2012-08-07
相关资源
最近更新 更多