有没有人在后台线程中使用ALAssetsLibrary时遇到崩溃?

我有一个ios应用程序,它没有以这种方式在ios 5上崩溃,现在ios 6在4或5 bg / fg周期启动后一直崩溃。 我已经将问题追溯到ALAssetsLibrary enumerateGroupsWithTypes的调用(每当启动时,应用程序都会同步到底层的照片库)。 对enumerateGroupsWithTypes的调用是在通过调度队列调用的后台线程中完成的,因此即使用户在完成之前将应用程序发送给bg,同步代码也可以完成。 我收到的崩溃消息总是相同的:

* __addContextToList_block_invoke_0()中的断言失败,/ SourceCache / PhotoLibraryServices / MobileSlideShow-1647.5/Sources/PLManagedObjectContext.m:1305

*由于未捕获exception'NSInternalInconsistencyException',原因:'上下文太多。 contextList中没有空格。

谷歌search这些错误消息还没有产生任何东西。 因为直到应用程序循环打开/closures至less5次,才会发生这种情况,我想这些程序块在完成后可能没有从苹果数据结构中正确删除? 预先感谢任何线索。

更新:经过更多调查后,这似乎与同步ALAssetsGroupLibrary相关。 当我只同步ALAssetsGroupSavedPhotos或者ALAssetsGroupLibrary中有0张照片时,崩溃不会发生。 如果我仅同步ALAssetsGroupLibrary,并且至less有1张照片,则会发生这种情况。

事实certificate,这一切都与为每次同步重新分配ALAssetsLibrary有关。 通过添加一个成员variables,崩溃似乎已经消失。

assetsLibrary = [[ALAssetsLibrary alloc] init];

虽然这显然是我的代码更有效率/更好的devise,但我会说我遇到的问题指出了ALAssetsLibrary和线程的一些ARC问题。 确保只分配一次!

我遭遇了同样的问题:

简而言之: ALAssetsLibrary实例枚举types时,或者上一步列举的ALAssetsGroup instaces正在枚举资产时, ALAssetsLibrary实例和ALAssetsGroup实例在所有枚举块完成之前都不应更改。

ALAssetsLibrary枚举在主线程中运行(请参阅此答案 )。 我怀疑这是因为资产库可能希望与用户进行交互以获取使用位置数据的权限(因为照片具有地理标记)。

如果您的代码假定ALAssetsLibrary将继续在后台线程中运行,这可能是您的问题的来源。

你可以检查这个。 我有这个问题,但通过创build一个单身ALAssetsLibrary对象来解决它

https://stackoverflow.com/a/32693118/3103450