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

我的UIImage操作遇到了一个奇怪的问题。

我正在进行Dropbox同步,并且必须将我的图像存储为本地文件。 为此,我使用UIImagePNGRepresentation(image)UIImageJPEGRepresentation(image, 0.66)保存它们。

这是我的典型工作流程:用户选择图像或拍摄照片图像被分配到imageView图像视图的UIImage使用以下方法保存到文件中

下次用户重新打开应用程序时,我会使用文件从文件中读取图像

 [UIImage imageWithContentsOfFile:fullImagePath] 

这个工作一次。

第二次运行例程时,我尝试再次将映像保存到磁盘时收到下面列出的错误消息。

 //saving the image NSData* data = isPNG?UIImagePNGRepresentation(image):UIImageJPEGRepresentation(image, 0.66); BOOL success = [data writeToFile:filepath atomically:YES]; if(!success) { DLog(@"failed to write to file: %@",filepath ); } //loading the image [UIImage imageWithContentsOfFile:fullImagePath] 

当我尝试重新保存以前转换为JPEG或PNG的图像时,我收到此错误

 2012-05-21 08:16:06.680 file already exists: NO ImageIO: CGImageRead_mapData 'open' failed '/var/mobile/Applications/C1312BF8-C648-4397-82F3-D93E4FAAD35F/Documents/imageData/LogoImage.jpg' error = 2 (No such file or directory) May 21 08:16:06 : ImageIO: JPEG Not a JPEG file: starts with 0xff 0xd9 May 21 08:16:06 : ImageIO: JPEG Application transferred too few scanlines 

在我看来,由于我试图再次将图像重新保存为JPEG,因此发生此错误。 如果我要求视图在上下文中呈现自己(有效地创建新图像),则不会发生错误。

有谁知道我做错了什么? 我是否通过尝试将UIImage转换为数据,重新加载数据以及在将其显示给用户后再次尝试将其转换为某种元数据?

我之前遇到过类似的事情。 看起来imageWithContentsOfFile使文件保持打开状态,只要它用于创建的UIImage仍然存在。 当时,我通过将文件读入NSData然后直接从NSData而不是文件创建UIImage来解决问题。