1⃣NSBundle 类,直接继承NSObject类.。
这个类的对象,代表了 app 中代码和资源的文件在文件系统里所在的位置,通俗的说,就是定位了程序使用的资源(代码,图形,音乐等数据)在文件系统里的位置,并可以动态的加载、or卸载掉可执行代码。
类方法: + (NSBundle *)mainBundle,返回一个 NSBundle类的对象,这个对象就是一个完全path,这个 path 保存的当前可执行的app路径,或者是 返回nil。app ,Build之后, 资源文件直接就复制到了根目录下,于是读取的方法,应该是这样。
注意点:在使用UIimage时,文件的路径需要是全路径。
NSString *earth = [[NSBundle mainBundle] pathForResource:@"Brad Cox" ofType:@"png"]; 编译之后,mainBundle的资源都是放到RootFolder下,所以,可以直接访问,不要指定内部路径。通常来说,这个 mainbundle 就是 当前的可执行app 的在根目录下的绝对路径。
finder根目录开始的路径+app 的name+.app 后缀。而资源就直接访问,都在 app 的包里。比如;
/Users/dashuai/Library/Application Support/iPhone Simulator/5.1/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2/tomcat.app/drink.png
2⃣ 从bundle中pathForResource获取数据,明明把数据添加到项目中了,但就是不对。
pathForResource获取的是全路径文件,打印看就知道了。
NSString *newDataName = [[NSBundle mainBundle] pathForResource:dataName ofType:format]; 为空
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值为空,说明没有获取到路径。