我有一个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次后才会发生这种情况,所以我想也许是在完成数据处理之后,无法从Apple数据结构中正确删除这些块吗?在此先感谢您提供任何线索。
更新:
经过更多调查,这似乎与同步ALAssetsGroupLibrary有关。当我仅同步ALAssetsGroupSavedPhotos或ALAssetsGroupLibrary中有0张照片时,不会发生崩溃。如果我仅同步ALAssetsGroupLibrary,并且其中至少有1张照片,则会发生这种情况。
最佳答案
事实证明,这都与为每个同步重新分配ALAssetsLibrary有关。
通过添加成员变量,崩溃似乎已经消失了。
assetLibrary = [[[ALAssetsLibrary alloc] init];
尽管对于我的代码来说这显然是一种更高效/更好的设计,但我要说的问题表明ALAssetsLibrary和线程有一些ARC问题。确保只分配一次!