美文网首页
iOS开发------使用自定义.bundle中的资源文件

iOS开发------使用自定义.bundle中的资源文件

作者: 尼古拉斯帅德布耀德 | 来源:发表于2017-11-08 11:31 被阅读0次

    在进行资源封装的时候用到了自定义的.bundle文件,之前在很多的SDK中也可以看到它的身影,就稍微了解了一下,不难,就是在引用里面文件的时候浪费点时间,浪费的原因下面也有说,这里就记录一下如何自定义创建.bundle以及如何引用里面的资源文件.

    在使用.bundle文件的时候需要注意:这个文件在运行的时候不会被编译到,So,此文件中存储的内容应该是资源文件,不能放编译的文件(比如能编译运行的代码)。

    创建.Bundle文件

    1、右键(双指点击) -> New File ->iOS-> Resource -> Settings Bundle

    2、在这里楼主起名叫做YPhotoBundle,这里也不需要写后缀名(.bundle),然后点击Create即可

    3、这个时候就会看到在创建路径下会有一个YPhotoBundle.bundle文件,右键(双指点击)打开包文件

    4、里面原来的东西不需要的可以都删掉,因为楼主放的是图片资源,所以直接把Image文件夹放到了里面,然后添加到项目中,就可以看到自定的.bundle文件以及里面的资源文件

    使用自定义.Bundle里面的资源文件

    错误演示

    先来一个错误演示,也是浪费了点时间的原因,由于第一次这么干,习惯性的Command + 单击,看到里面有这么一个方法

    + (nullable NSBundle *)bundleWithIdentifier:(NSString *)identifier;

    1

    1

    自认为是.bundle的名字默认当做Identifier,于是就想用这个方法获取自定义的NSBundle文件,于是乎,获取图片用的是一下代码:

    //获取路径

    NSString* path = [[NSBundlebundleWithIdentifier:@"YPhotoBundle"] pathForResource:@"Image"ofType:nil];

    //拼接路径

    path = [path stringByAppendingPathComponent:@"未选中.png"];

    //获取图片对象

    return[UIImageimageWithContentsOfFile:path];

    结果发现,返回的bundle,path,image全部为nil,于是又仔细读一下它的官方文档:

    //返回之前创建过并且拥有bundle identifier的NSBundle实例

    Returns the previously created NSBundle instance that has the specified bundle identifier.

    /**

    *如果找不到,则返回nil

    *好吧我承认结果就是找不到0.0,我也不知道如何在创建.bundle的时候给予他bundle identifier

    *因为在Methods for creating的方法里没有找到,如果有知道的大神,麻烦告知一下 Mark

    **/

    The previously created NSBundle instance that has the bundle identifier identifier. Returns nilifthe requested bundle is not found.

    正确用法

    前面扯了段错误演示,(傲娇了一下 - -),正确的用法如下:

    1、获得自定义.bundle文件的路径

    //自定义的.bundle文件也存在与应用的主目录下,所以还是需要从主目录来拼接路径

    -(NSString*)bundlePath

    {

    //获取路径

    NSString* path = [[NSBundlemainBundle] pathForResource:@"YPhotoBundle"ofType:@"bundle"];

    return[path stringByAppendingPathComponent:@"Image"];

    }

    2、在引用图片的时候在使用方法就可以获取到YPhotoBundle.bundle里面Image下的资源文件。

    //获得正常未选中的图片

    -(UIImage*)normalImage

    {

    //最后加不加.png都是可以的,因为没有重名的问题

    return[UIImageimageWithContentsOfFile:[self.bundlePathstringByAppendingPathComponent:@"未选中.png"]];

    }

    相关文章

      网友评论

          本文标题:iOS开发------使用自定义.bundle中的资源文件

          本文链接:https://www.haomeiwen.com/subject/rnpemxtx.html