免费开源的iOS开发学习平台

NSBundle类基本使用

当创建一个应用时,系统存储了应用相关联的所有资源,例如图片、文件等,将这些内容放在应用包(application bundle)中。为了定位应用包中的资源,则需要使用NSBundle类。

向应用包中添加资源

在使用Xcode进行iOS开发时,可以在Finder中选中一些资源文件,然后拖动到Xcode的左边窗口中,即可完成资源的添加。当出现如下对话框时,通常选择复制资源文件到项目中,如下所示。

由于Command Line Tool是没有Bundle概念的,所以我们需要先创建一个Application,如下所示:

然后我们向程序的目录中添加一个myfile.txt文件,添加成功后,该资源文件就会出现在工程目录中。

从应用包中读取资源

当我们向程序的应用包中添加了一些资源文件后,在某些情况下,就需要从应用包中读取这些文件,例如,获取一张图片并显示在屏幕上,这就需要找到这张图片在程序包中的位置。NSBundle类提供了在程序包中查找资源的相关方法。

  • 使用mainBundle方法来实例化得到一个NSBundle类对象;
@property (class, readonly, strong) NSBundle *mainBundle;
  • 可以使用pathForResource方法来获取某个资源的路径,返回一个NSString类型的对象;
- (nullable NSString *)pathForResource:(nullable NSString *)name ofType:(nullable NSString *)ext;

如下的所有代码添加到ViewController.m文件的viewDidLoad方法中,可以实现从应用包中读取名称为myfile,类型为txt的文件(请提前添加文件到应用包),并打印出文件中的内容。。

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"txt"];
    NSLog(@"%@",filePath);
    //读取文件
    NSString *fileString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@",fileString);
}

运行结果如下,我们可以看到资源文件的路径,同时能够打印出资源文件中存储的内容。

示例代码

https://github.com/99ios/4.9