使用线程时的核心数据问题

时间:2012-12-08 23:40:40

标签: objective-c multithreading core-data exc-bad-access

我正在做一个业余爱好项目,我在业余时间慢慢更新,以帮助学习一些新东西。我遇到的一个绊脚石是在一个单独的线程中使用Core Data。我已经阅读了Apple关于Core Data并发性的文档,我读到的所有内容似乎都很直接,所以我开始更新我的项目以在后台线程上加载数据,因为我不想在加载时锁定UI。

如果在主线程上加载Core Data对象,该项目可以正常工作。如果我切换到后台加载,它会崩溃。

在这个阶段,我可以验证:

  • NSManagedObject加载在线程上,我可以访问它的属性
  • 将数据输出到stdout工作正常,看起来不错。
  • 主线程上加载的数据对象的二进制comparson和后台线程上加载的数据证明它们是相同的。

当我在NSData上调用类别实现时,会发生实际问题。我可以验证NSData对象在后台线程上加载时是否正常,只有当我调用一个函数在NSData对象加载后对它做一些工作时我才会遇到问题。问题是EXC_BAD_ACCESS,这通常意味着对象的地址是错误的,但它没有任何意义。

我可能只是得到一些明显或简单的错误 - 但我只是看不到森林里的树木。

如果你认为你可以提供任何建议,因为它让我发疯,那么你可以在这里找到代码:

编辑帖子回答:删除了项目不再存在的网址。

1 个答案:

答案 0 :(得分:0)

好的,我终于找到了问题所在。解压缩方法超过了线程的堆栈大小,因此导致了一个奇怪的&随机EXC_BAD_ACCESS被解雇。

我希望调试器能够在这种情况下产生更直接的线索。

这是一个有效的'堆栈溢出'问题,已解决。