NSBundle pathForResource取不到值问题
一、问题描述:
初学UI,照着视频敲汤姆猫项目,做到加载图片(含jpg格式)时有两种方法可以实现一种是有缓存,一种是没有缓存。代码实现如下:
1.imageNamed: 有缓存(传入文件名)
UIImage *image = [UIImage imageNamed:filename]; // imageNamed 方法 直接传文件名,有缓存
2.imageWithContentsOfFile:没有缓存(传入文件的全路径):
// 获取文件全路径: NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:filename ofType:nil]; // 传入文件名作为参数就可以加载全路径;// NSString *path = [bundle pathForResource:@"imageDate.plist" ofType:nil]; 此代码等同上句,左边放文件名,右边放扩展名或者将plist写在后面 UIImage *image = [UIImage imageWithContentsOfFile:path]; // ~File 传文件全路径,无缓存;使用第一种方法运行并点击控件按钮无错误;使用第二种方法点击运行无报错,但是点击控件按钮时报错如下:
二、问题解决历程:
1、打断点调试,发现第二种方法获取的path值为空,说明没有获取到路径。
2、将图片文件夹分别拖入Assets.xcassets和Supporting Files 文件都不写。
3、请教了朋友无解,百度谷歌也未能成功,尝试了下面的添加文件方式,也未果;
即点击项目文件——Build phrase ——Copy Bundle Resources——直接添加图片文件夹也不可以。
3、最后翻看视频发现是因为我托图片文件夹的时候勾选的选项不正确,原来往Supportint Files 直接拖的如图1所示,并且默认就是图一所示情况;后来重新勾选后如图二所示,运行正常,但是存在原来UImageview 的背景图片不能正常显示问题,这时需要将背景图片重新添加后缀:~.jpg才可以。(因为图片是jpg文件格式,可能出现本博客所描述问题也跟Xcode不能直接显示jpg图片有关系,有待考察)。
图一:Xcode默认的文件勾选框
图二:修改后的文件勾选方式
三、分析与总结:
碰到问题解决问题总会有收获的。过程虽然漫长、煎熬,但是记录下来下次就会倍加小心,俗话说,吃一堑,长一智。在我谷歌过程中发现国外的Stack Overflow 论坛上也有人遇到过此类问题: http://stackoverflow.com/questions/3949368/nsbundle-pathforresource-is-null 。