文件包是以一个.bundle 为扩展名的文件包。和普通文件夹相比它们有 2 个主要特点:
1. Cocoa Touch 提供了一个界面,通过这个界面你可以进入相应的文件包简单获取里边已有资源。
2.如果在 Xcode 左侧导航窗口增加一个文件包,任何文件增加或者移出文件包将分别立即出现或者消失在 Xcode 导航窗口。相反,如果你在 Xcode 导航增加了一个文件夹,然后再去删除磁盘中这个文件夹中的文件,在没有 Xcode 的帮助下,这个文件将会变成红色并且不能立即删除。文件包非常有用,特别是你想在文件夹中通过 Finder 而非 Xcode 手动增加文件。
每个 IOS 应用至少有一个文件包,叫做主文件包。主文件包包含你的应用软件中的二进制代码和其他在应用软件中使用的资源,比如影像、声音、HTML 文件和其他相关文件。换言之,主文件包包含了你提交给APPStore 或者发布到自己组织内部的最终二进制文件中的资源。这些资源随后可以用 NSBundle 类的mainBundle 类的方法动态加载。
每个App在提交AppStore时他的主文件夹包在磁盘中一个水平层次结构,这就意味着所有装在App文件包的文件放在主文件夹包的根文件夹内。也就是说,主文件包有一个唯一的文件夹—根文件夹,所有文件和资源都放在这个文件夹里。即使你在磁盘中有一个只有几张图片的文件夹,无论拖进或者拖出 Xcode, 这个文件夹中的文件都将放在主文件夹里,而不是在这个文件夹自己内部。
从主文件加载内容时常用的方法是:
- [NSBundle mainBundle]pathForResource:@"0" ofType:@"jpg"
如果从自定义的包中加载内容,则使用下面的方法:
- //从文件包加载数据
- NSString *bundlePath=[[NSBundle mainBundle]pathForResource:@"image" ofType:@"bundle"];//获取bundle路径,我的bundle包名为image.bundle
- if ([bundlePath length]>0) {//判断路径是否获取成功
- //定义bundle,获取自定义包
- NSBundle *imageBundle=[NSBundle bundleWithPath:bundlePath];
- if (imageBundle!=nil) {
- NSString *path=[imageBundle pathForResource:@"610" ofType:@"jpg"inDirectory:@"images.bundles"];
- if ([path length]>0) {
- UIImage *image=[UIImage imageWithContentsOfFile:path];
- if (image!=nil) {
- NSLog(@"从文件包中加载成功!");
- }
- else
- NSLog(@"保存失败");
- }
- else
- NSLog(@"路径不存在");
- }
- else
- NSLog(@"bundle不存在");
- }