将图像从项目资源复制到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中的进度条将文件从一个地方复制到另一个地方[重复]