1

我能找到的关于这个错误的唯一其他信息是这里,这没有帮助。

尝试保存图像时出现以下错误。这似乎只发生在我一次有多个图像(~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(), ^{

        });
    });
}

我收到了这个错误,结果我的图像没有保存(或者只保存了一半),这完全弄乱了 UI 显示和任何后续应用程序的启动。我已将其范围缩小到UIImagePNGRepresentation通话。

在相关的说明中,该代码锁定了 UI;我想是因为UIImagePNGRepresentation电话;但是,据我所知UIImagePNGRepresentation,这不是线程安全的,所以我不能在后台执行此操作。有谁知道解决这个问题的方法?

谢谢!

4

2 回答 2

0

如果有人遇到类似的问题,这就是为我解决的问题。

iPhone iOS 保存从 UIImageJPEGRepresentation() 获得的数据第二次失败:ImageIO: CGImageRead_mapData 'open' failed

这是我用来在后台线程中保存 UIImages 的解决方案:

不使用 UIImagePngrepresentation 或 UIImageJpegRepresentation 将 UIImage 转换为 NSData

于 2015-03-01T23:45:39.433 回答
0

我收到此错误是因为我调用的 api 在我试图转换为 PNG 的 tmp >> NSData 文件中抛出 500 并返回 html 错误页面。

您可能希望在转换之前检查您尝试打开的文件是否为图像。

如果您使用 dowloadTask 下载文件,则在移动 tmp > /Document/.png 之前检查 statusCode 是否为 200

这是我在其他 SO 中的回答

于 2016-12-06T15:53:28.050 回答