ALAssetPrepresentation元数据方法报告崩溃



我有一些代码包装了一个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_ADRESS为0x0。

这可能是由于缓冲区溢出造成的。请查看苹果网站的链接,该链接显示了与您相同的缓冲区溢出崩溃报告。希望这能对你有所帮助。

https://developer.apple.com/library/ios/documentation/Security/Conceptual/SecureCodingGuide/Articles/BufferOverflows.html#//apple_ref/doc/uid/TP40002577-SW1

最新更新