这一节我来讲一下如何用bundle实现资源(xib、图片等)的封装和引用(上一节是偷懒的做法,估计在大神眼里很不专业,这节来点专业,哈哈....)。
第一步:建一个类库起名为HelloBundle,创建完之后,在打包项目中新建一个HelloBundleViewController.h/m/xib三个文件,拖一个UIImageView 到Xib上面,设置图片资源1.jpg(关于类库的创建的过程请参照iOS
静态库a文件的打包 上)。如下图:
第二步:加入Bundle,选中工程文件如下图,起名为ResourceBundle:
点击完Next之后如下图,看一看到多了途中的1和2:
之后再要做的事情是,见下图:
第三步:在HelloBundle.h和m文件声明实现下面函数:
- (UIViewController *) getVc
{
//获取app资源安装目录路径
NSString *resPath = [[NSBundlemainBundle]
resourcePath]; ---------------------------------1
NSString *bundlePath = [resPathstringByAppendingString:@"/ResourceBundle.bundle"];--------2
//把xib文件从项目资源中提取出来给m文件
HelloBundleViewController *vc = [[HelloBundleViewControlleralloc] initWithNibName:@"HelloBundleViewController"bundle:[NSBundlebundleWithPath:bundlePath]];----3
return vc;
}
大家可以比较和之前iOS 静态库a文件的打包 中 比较一下:第1行代码意思说获取app手机根目录,第2行是在根目录下找到这个xib,第3行,我不解释你也知道,那么为什么这么写(能不能不这么写,可以,iOS
静态库a文件的打包 中介绍了),请看下图:
他们是完全是不同的target(但属于同一个项目),直接取资源是取不到的,好比你在自己家那东西不需要通知任何人,但是你在你叔叔家就不行(虽然都是一个奶奶的大家庭),xib中引用的资源就不需要这么写了,毕竟他们是在一个target下面,有点不恰当,哈哈,来看看下图:
这个是我用手机上这个项目app的目录。虽然bundle用起来专业,但是麻烦,但是因为专业,所以我信赖!
第四步:请在选择HelloBundle,我们首先选择(关于architectures和Build
active Architecture Only属性设置,已经不多介绍),Command+B生成a文件。在Products文件下右击libHelloBundle.a找到这个文件。
第五步:请在选择ResourceBundle(关于architectures和Build
active Architecture Only属性设置,已经不多介绍,见下图,详情参见iOS 静态库a文件的打包 上):
Command+B生成ResourceBundle.bundle文件,同样的方法找到这个文件。如下图:
第六步:创建Empty application新项目引入bundle和a文件(直接拖进去),同时在app delegate添加如下代码(参照图)
HelloBundle *helloBundle = [[HelloBundlealloc]
init];
UIViewController *vc = [helloBundle
getVc];
self.window.rootViewController = vc;
如下图:
最后运行如下:
这里就把a文件全部介绍完了,欢迎大家吐槽,我的Q 759448747 ios超级大群:28926427