Сообщается о сбое для метода метаданных ALAssetRepresentation

У меня есть код, который упаковывает объект 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.


person Faisal    schedule 03.12.2013    source источник
comment
Мы наблюдаем это и в последнее время. Глядя на CFDataGetBytePtr в верхней части стека, я чувствую, что это может быть связано с памятью. Вы нашли причину/решение для этого?   -  person John Estropia    schedule 27.01.2014
comment
Я также вижу этот сбой в дикой природе на iPhone 4S, хотя я не смог воспроизвести его. Crashlytics сообщает, что на момент сбоя на устройстве, на котором произошел сбой, было доступно около 45 МБ ОЗУ. Я уверен, что это не обязательно точно, но просто еще одна точка данных.   -  person Rizwan Sattar    schedule 28.01.2014
comment
В качестве дополнительной информации в наших журналах указано, что это происходит и на других моделях устройств (не только на iPhone 4S). Но однозначно только iOS 7.0 и выше.   -  person John Estropia    schedule 31.01.2014
comment
Это происходит только для изображений, снятых с помощью камеры?   -  person odukku    schedule 12.03.2014
comment
В нашем случае мы этого никогда не узнаем. Мы видим этот сбой только из наших файлов журнала и не можем воспроизвести его на нашей стороне. Если это поможет, наше приложение загружает активы только из ALAssetsGroupSavedPhotos и ALAssetsGroupAlbum, поэтому мы можем исключить поток фотографий и другие специальные папки.   -  person John Estropia    schedule 13.03.2014
comment
Вау! он продолжает читать данные XMP, которые представляют собой строки XML. Это скрытое свойство метаданных, которое происходит в отретушированных изображениях. Почему бы вам не попробовать фреймворк ImageIO, чтобы прочитать метаданные и посмотреть, не происходит ли сбой.   -  person egghese    schedule 21.05.2014
comment
У меня такая же проблема, но я не могу воспроизвести ее самостоятельно (просто анализирую отчеты о сбоях). Jesly, не могли бы вы рассказать больше о чтении данных XMP, пожалуйста? Я просто пытаюсь сделать: [[asset defaultRepresentation] метаданные];   -  person gN0Me    schedule 20.08.2014


Ответы (1)


Это могло быть вызвано переполнением буфера. Пожалуйста, проверьте ссылку на веб-сайте Apple, который показывает отчет о сбое переполнения буфера, такой же, как у вас. Надеюсь, это поможет вам.

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

person shubhangi    schedule 20.08.2014