我有一个 ios 应用程序,它在 ios 5 上没有以这种方式崩溃,现在在 4 或 5 个 bg/fg 周期后启动时在 ios 6 上持续崩溃。我已将问题追溯到我对 ALAssetsLibrary enumerateGroupsWithTypes 的调用(该应用程序在启动时会同步到底层照片库)。对 enumerateGroupsWithTypes 的调用是在通过调度队列调用的后台线程中进行的,这样即使用户在应用程序完成之前将应用程序发送到 bg,同步代码也可以完成。我收到的崩溃消息总是一样的:
* __addContextToList_block_invoke_0() 断言失败,/SourceCache/PhotoLibraryServices/MobileSlideShow-1647.5/Sources/PLManagedObjectContext.m:1305
和
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“上下文太多。 contextList 中没有空间。'
谷歌搜索这些错误消息没有产生任何结果。由于在应用程序循环开/关至少 5 次之前这种情况永远不会发生,我在想可能是这些 block 在完成时没有从 apple 数据结构中正确删除?提前感谢任何线索。
更新: 经过更多调查,这似乎与同步 ALAssetsGroupLibrary 有关。当我只同步 ALAssetsGroupSavedPhotos 或 ALAssetsGroupLibrary 中有 0 张照片时,不会发生崩溃。如果我只同步 ALAssetsGroupLibrary 并且其中至少有 1 张照片,就会发生这种情况。
最佳答案
事实证明,这都与为每次同步重新分配 ALAssetsLibrary 有关。 通过添加一个成员变量,崩溃似乎已经消失。
assetsLibrary = [[ALAssetsLibrary 分配] 初始化];
虽然这显然是我的代码的更有效/更好的设计,但我想说我遇到的问题表明 ALAssetsLibrary 和线程存在一些 ARC 问题。确保只分配一次!
关于ios - 在后台线程中使用 ALAssetsLibrary 时,有人遇到过崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480611/