Мы столкнулись с необычным сбоем, когда UIImagePNGRпредставляет() иногда вызывает вызовы 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 возможных изображений, которые может отображать наше приложение, и все они могут быть загружены и сохранены на диск без проблем. Некоторые ответы на этот gist подразумевают, что эта проблема может быть вызвана поврежденными изображениями, но, видя, как я загрузил более 16 000 изображений и никогда не имел вопрос, я не думаю, что это может быть так.
Последняя гипотеза, над которой я работаю, заключается в том, что каким-то образом загружаемые данные повреждены, и поэтому создается поврежденный UIImage. Однако все попытки создать поврежденный UIImage потерпели неудачу. Apple, похоже, создала надежный конструктор для UIImage, так что все, что я передаю, в котором недопустимо, приводит к тому, что nil возвращается из конструктора.
Кто-нибудь еще испытал что-то подобное из UIImagePNGRпредставления?