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

时间:2011-03-04 13:29:36

标签: iphone objective-c ipad nsfilemanager

我在将图像从项目资源复制到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]);
      }
   }

}

有什么想法吗?

提前致谢。

7 个答案:

答案 0 :(得分:1)

我无法在您的代码中发现任何错误,我只能提出一个建议

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

NSData * data; //来自您徽标图片的数据

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

答案 1 :(得分:0)

我不完全确定,但我认为你的界限:

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

应该是:

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

首先,我要感谢大家的答案,所有这些都有助于解决我的问题。

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

谢谢!

答案 4 :(得分:0)

原来这是文件格式的问题。当我将图像更改为JPG时,问题就消失了。似乎苹果改变了PNG图像,我对此并不十分肯定,但是对于我所经历过的,它很有意义。

谢谢!

答案 5 :(得分:0)

@mikywan已正确指出JPG工作正常,但从资源包复制时的PNG图像已损坏。

如果有人仍想使用png图像是一个解决方案,请选择目标上的构建设置并设置&#34;压缩PNG文件&#34;到&#34;否&#34;。构建应用程序时,不会更改资源中的PNG。

答案 6 :(得分:0)

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

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