我有一些代码包装了一个 ALAsset 对象,该对象是通过枚举 ALAssetLibrary 中的资产来检索的。我收到了用户遇到崩溃的报告,其中包装对象的一部分向它包含的 ALAsset 询问元数据。
崩溃的代码在这个包装类中,它只是要求它的 ALAsset 的元数据,如下所示:
[[myAlAsset defaultRepresentation] metadata];
这是代表我看到的崩溃的部分堆栈跟踪:
0
CoreFoundation CFDataGetBytePtr + 5
1
PhotoLibraryServices __46-[PLManagedAsset adjustmentsXMPRepresentation]_block_invoke + 228
2
PhotoLibraryServices __46-[PLManagedAsset adjustmentsXMPRepresentation]_block_invoke + 228
3
CoreData developerSubmittedBlockToNSManagedObjectContextPerform + 88
4
CoreData -[NSManagedObjectContext performBlockAndWait:] + 114
5
PhotoLibraryServices -[PLManagedAsset adjustmentsXMPRepresentation] + 226
6
AssetsLibrary __33-[ALAssetRepresentation metadata]_block_invoke + 24
7
AssetsLibrary __53-[ALAssetRepresentationPrivate _performBlockAndWait:]_block_invoke + 68
8
CoreData developerSubmittedBlockToNSManagedObjectContextPerform + 88
9
libdispatch.dylib _dispatch_client_callout + 22
10
libdispatch.dylib _dispatch_barrier_sync_f_invoke + 26
11
CoreData -[NSManagedObjectContext performBlockAndWait:] + 106
12
AssetsLibrary -[ALAssetsLibrary _performBlockAndWait:] + 134
13
AssetsLibrary -[ALAssetRepresentationPrivate _performBlockAndWait:] + 176
14
AssetsLibrary -[ALAssetRepresentation metadata] + 464
有人对可能发生的事情有想法吗?作为这些资产基础的 AlAssetLibrary 与静态引用一起保存,因此不应在内存中清理它,因此我不希望 ALAsset 已失效。这个问题似乎是从发布 iOS 7 开始的。
崩溃本身是 EXC_BAD_ACCESS,KERN_INVALID_ADDRESS 位于 0x0。