NSBundle

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:没有缓存(传入文件的全路径):

 

  [objc] view plaincopy
  // 获取文件全路径:  
    1. NSBundle *bundle = [NSBundle mainBundle];  
    2. NSString *path = [bundle pathForResource:filename ofType:nil]; // 传入文件名作为参数就可以加载全路径;  
    3.   NSString *path = [bundle pathForResource:@"imageDate.plist" ofType:nil]; 此代码等同上句,左边放文件名,右边放扩展名或者将plist写在后面  
    4.   
    5. UIImage *image = [UIImage imageWithContentsOfFile:path]; // ~File 传文件全路径,无缓存;
    6.  

       1、打断点调试,发现第二种方法获取的path值为空,说明没有获取到路径。

      2、将图片文件夹分别拖入Assets.xcassets和Supporting Files 文件都不写。
      3、点击项目文件——Build phrase ——Copy Bundle Resources——直接添加图片文件夹也不可以。
      4、 最后翻看视频发现是因为我托图片文件夹的时候勾选的选项不正确,原来往Supportint Files 直接拖的如图1所示,并且默认就是图一所示情况;后来重新勾选后如图二所示,运行正常,但是存在原来UImageview 的背景图片不能正常显示问题,这时需要将背景图片重新添加后缀:~.jpg才可以。(因为图片是jpg文件格式,可能出现本博客所描述问题也跟Xcode 不能直接显示jpg图片有关系,有待考察)。
  

      

   http://img.blog.csdn.net/20151102115012644?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

       

原文地址:https://www.cnblogs.com/it38/p/4990202.html