1

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

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

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

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

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

我可能只是得到了一些明显或简单的错误——但我就是只见树木不见森林。

如果您认为您可以就此提供任何建议,因为它让我发疯,那么您可以在此处找到代码:

编辑帖子答案:已删除 URL,因为项目不再存在。

4

1 回答 1

0

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

在这种情况下,我原以为调试器会产生更直接的线索。

所以一个有效的“堆栈溢出”问题,解决了。

于 2012-12-12T23:08:24.087 回答