Мы наблюдаем странный сбой, когда UIImagePNGRepresentation() иногда вызывает вызовы png_error. Нам не удалось воспроизвести эту ошибку ни на одном из наших домашних устройств.
Вот пример трассировки стека из одного из наших аварийных журналов HockeyApp:
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x3167132c __pthread_kill + 8
1 libsystem_c.dylib 0x33d6729f abort + 94
2 ImageIO 0x346c38bf png_error + 114
3 ImageIO 0x346c2fe3 png_write_end + 46
4 ImageIO 0x346bf069 writeOnePng + 2260
5 ImageIO 0x346be78b _CGImagePluginWritePNG + 82
6 ImageIO 0x346be6fd CGImageDestinationFinalize + 132
7 UIKit 0x31346e23 UIImagePNGRepresentation + 274
Мы видели эти журналы сбоев только на устройствах под управлением iOS 5.1+ и выше. На самом деле у нас также были сбои в iOS 6, поэтому эта ошибка еще не исправлена.
Я написал тестовое приложение, которое загружает более 16 000 возможных изображений, которые может отображать наше приложение, и все они могут быть загружены и сохранены на диск без проблем. Некоторые ответы на этот суть подразумевают, что эта проблема может быть вызвана поврежденными изображениями, но, учитывая, что я скачал более 16 000 изображений, и у меня никогда не было проблем, я не думаю, что это может быть так.
Последняя гипотеза, над которой я работаю, заключается в том, что загружаемые данные каким-то образом повреждены, и поэтому создается поврежденный UIImage. Однако все попытки создать поврежденный UIImage не увенчались успехом. Apple, кажется, создала надежный конструктор для UIImage, так что все, что я передаю, является недопустимым, что приводит к возврату nil из конструктора.
Кто-нибудь еще сталкивался с чем-то подобным от UIImagePNGRepresentation?