<Ошибка>: ImageIO: CGImageReadGetBytesAtOffset в UIImagePNGRepresentation
Единственная другая информация, которую я мог найти об этой ошибке, была здесь, которая не была полезна.
Я получаю следующую ошибку при попытке сохранить изображения. Кажется, это происходит только тогда, когда у меня есть несколько изображений (~6) одновременно. Это также кажется совершенно случайным относительно того, когда это происходит. Иногда все в порядке, иногда происходит сбой на 1 изображении, иногда на 3, а иногда приложение полностью вылетает в EXC_BAD_ACCESS
ошибка.
Ошибка: ImageIO: CGImageReadGetBytesAtOffset: ^^^ ОШИБКА ^^^ CGImageSource создан с размером данных: 1144891 - только текущий размер: 1003855
Вот код, который сохраняет изображение:
- (void)saveWithImage:(UIImage *)anImage andFileName:(NSString *)aFileName {
NSString *subDirectory = @"Images";
NSString *fileName = [aFileName stringByAppendingString:@".png"];
NSString *documentsPath = [[CMAStorageManager sharedManager] documentsSubDirectory:subDirectory].path;
NSString *imagePath = [subDirectory stringByAppendingPathComponent:fileName];
__block NSString *path = [documentsPath stringByAppendingPathComponent:fileName];
__block NSData *data = UIImagePNGRepresentation(anImage);
self.image = anImage;
self.tableCellImage = anImage;
self.galleryCellImage = anImage;
self.imagePath = imagePath; // stored path has to be relative, not absolute (iOS8 changes UUID every run)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
if (![data writeToFile:path atomically:YES])
NSLog(@"Error saving image to path: %@", path);
dispatch_async(dispatch_get_main_queue(), ^{
});
});
}
Я получаю эту ошибку, и в результате мои изображения не сохраняются (или сохраняется только половина из них), что полностью портит отображение пользовательского интерфейса и запускает любое последующее приложение. Я сузил это до UIImagePNGRepresentation
вызов.
С другой стороны, этот код блокирует пользовательский интерфейс; Я думаю из-за UIImagePNGRepresentation
вызов; однако насколько я знаю UIImagePNGRepresentation
не является потокобезопасным, поэтому я не могу сделать это в фоновом режиме. Кто-нибудь знает способ обойти это?
Спасибо!
2 ответа
Если кто-то сталкивается с подобной проблемой, это то, что исправило это для меня.
и это решение, которое я использовал для сохранения UIImages в фоновом потоке:
Я получал эту ошибку, потому что API, который я вызывал, выбрасывал 500 и возвращал html страницу ошибки в файле tmp >> NSData, который я пытался преобразовать в PNG.
Вы можете проверить файл, который вы пытаетесь открыть, это изображение перед конверсией.
Если вы загружаете файл с помощью dowloadTask, убедитесь, что statusCode равен 200, прежде чем перемещать tmp > /Document/.png