iOS-加载自定义Bundle中的资源

为了资源的封装和有效利用,开发时常用自定义Bundle来储存图片和xib文件等。

自定义Bundle流程如下:

创建Bundle

BundleCreate

注意是在 OSX 面板下。

修改设置

Build Settings下,将Installation Directory修改为空,并将SDK修改为iOS,默认为OSX的。

添加资源

Copy Bundle Resources面板下添加需要包含在Bundle中的资源文件。

编译生成

选择编译的对象为Generic iOS Device,进行编译,在Products目录下,可以看到生成成功的Bundle。

这里,在编译Bundle时,XCode会将同名的多个png文件合并成tiff文件,例如delete@2x.pngdelete@3x.png合并成delete.tiff,并将xib文件装换成nib文件。

因此,注意不能直接通过将文件夹改后缀名为.bundle,这种情况下,xib文件不能转换成nib文件,在加载时,会报错:

1
2
Terminating app due to uncaught exception 
'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle:...'

加载自定义Bundle中的资源

获取NSBundle对象

1
NSBundle *bundle = [NSBundle bundleWithPath:[[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/XXX.bundle"]];

加载图片文件

1
[UIImage imageWithContentsOfFile:[[_bundle bundlePath] stringByAppendingFormat:@"/%@.tiff", imageName]];

加载nib文件

1
[_bundle loadNibNamed:@"Name" owner:self options:nil][0]

这里注意,如果是xib,会报上述的异常。