将图像从项目资源复制到Objective-C中的文档文件夹时出现问题

Posted

技术标签:

【中文标题】将图像从项目资源复制到Objective-C中的文档文件夹时出现问题【英文标题】:Problem when copying image from project resources to documents folder in Objective-C 【发布时间】:2011-03-04 13:29:36 【问题描述】:

我在将图像从项目资源复制到 Documents 文件夹时遇到问题。

我正在使用 NSFileManager 的 copyItemAtPath。当我在模拟器上对其进行测试时,它工作正常,但是当我在设备(iPod 或 iPad)上进行测试时,图像被复制时出现错误。

使用 PhoneView 我可以看到复制的图像,但是当我打开它时,图像是空的。当我在 Firefox 上打开它时,会显示下一条消息:

图片“file:///../logo.png”无法显示,因为它包含错误。

NSFileManager *fileMgr = [NSFileManager defaultManager];
NSString *logoPath = [webPath stringByAppendingPathComponent:@"logo"];

if (![fileMgr fileExistsAtPath:logoPath]) 
   NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"];
   NSError *error = nil;
   BOOL isSuccess = [fileMgr copyItemAtPath:resourcePath toPath:logoPath error:&      
   if (!isSuccess || error) 
      if (error)
         NSLog(@"ERROR copy logo: %@", [error description]);
      
   

有什么想法吗?

提前致谢。

【问题讨论】:

【参考方案1】:

我在你的代码中找不到任何错误,我只能给出一个建议

将您的图像转换为 NSData 并写入文件夹

NSData *data;//来自你的标志图像的数据

[data writeToFile:<document path> atomically:YES];

【讨论】:

【参考方案2】:

我不完全确定,但我认为你的台词:

NSString *logoPath = [webPath stringByAppendingPathComponent:@"logo"];

应该是:

NSString *logoPath = [webPath stringByAppendingPathComponent:@"logo.png"];

我认为 ios 不会将“logo”识别为“logo.png”。

【讨论】:

是的,为了使代码易于理解,我重命名了该部分,并忘记了扩展。【参考方案3】:

查看文件名中的大写字符,有时会出现错误,iPhone 区分大小写,mac-simulator 可能不...

【讨论】:

【参考方案4】:

首先,我要感谢大家的回答,他们都帮助解决了我的问题。

我不知道为什么,但是当我复制 PNG 图像时,图像不知何故损坏了,当我尝试对 JPG 图像做同样的事情时,问题就解决了。

谢谢!

【讨论】:

【参考方案5】:

原来是文件格式有问题。当我将图像更改为 JPG 时,问题就消失了。似乎苹果更改了PNG图像,我对此不太确定,但就我所经历的而言,这是有道理的。

谢谢!

【讨论】:

【参考方案6】:

@mikywan 已正确指出 JPG 可以完美运行,但从资源包中复制的 PNG 图像已损坏。

如果有人仍然想使用 png 图像,这是一个解决方案,请选择目标上的构建设置并将“压缩 PNG 文件”设置为“否”。资源中的 PNG 在构建应用时不会更改。

【讨论】:

【参考方案7】:

古老的问题,但看起来苹果仍然很糟糕,所以问题在 2 年后仍然存在。万一其他人遇到问题,这就是我解决它的方法,这基本上是在拼出@Rajesh已经说过的内容:

BOOL success = [UIImagePNGRepresentation([UIImage imageNamed:@"icon"]) 
                   writeToFile:logoPath atomically:YES];

【讨论】:

以上是关于将图像从项目资源复制到Objective-C中的文档文件夹时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 将特定图像从捆绑资源路径复制到 Documents Dir

使用Objective-c中的进度条将文件从一个地方复制到另一个地方[重复]

如何使用objective-c从CloudKit中的资产字段中检索图像

将核心数据数据库导入新项目

如何将部分纹理复制到opengl中的图像

MobileFirst:将文件从本机资源文件夹复制到 Android 环境中的本机文件夹