iOS – 从Documents目录中的bundle加载xib

我一直致力于为我的iOS应用程序提供“自定义skinnable”接口,方法是捆绑xib并下载bundle,并在这些bundle中加载xib.

我已经按照这里非常有用的说明来使它几乎正常工作.

loading NSBundle files on iOS

我有捆绑下载,解压缩,可以看到xib文件.我没有在示例中使用任何TestViewController代码,但是在使用刚刚下载的xib创建视图控制器时这样做:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    Nsstring *documentsDirectory = [paths objectAtIndex:0];
    Nsstring *filePath = [documentsDirectory stringByAppendingPathComponent:@"gg.bundle"];
    NSBundle *bundle = [NSBundle bundleWithPath:filePath];

    if ( !bundle )
    {
        NSLog(@"Error getting bundle");
    }

    MyViewController *vc = [MyViewController new];
    [vc initWithNibName:@"CustomDownloadedXib" bundle:bundle];

当我将此视图控制器推送到我的堆栈时,我收到此错误

***由于未捕获的异常’NSInternalInconsistencyException’而终止应用程序,原因:’无法在bundle中加载NIB:’NSBundle(尚未加载)’,名称为’CustomDownloadedXib”

问题似乎是我的包“尚未加载”.我尝试通过调用强制我的包加载:

[bundle load]

但这没有用.

我的方法不正确吗?这似乎是直观的方式.

提前致谢!

解决方法

首先,如果没有正确创建一个包,它将不会被加载.因此,为了创建一个合适的包,下面是创建一个包的步骤:

>通过在OS X下选择名为bundle的模板添加新目标 – >框架&库.
>选择新创建的目标并将BaseSDK从OSX更改为最新iOS.
>在Build Phrases中添加要从捆绑中使用它的.xibs,图像或其他资源 – >复制捆绑资源.
>在Build Phrases中添加CoreFoundation框架 – >链接二进制文件与库.
>编译选择iOS设备的目标.
>将新创建的捆绑包从Products目录保存到某个位置.

现在将该包复制到您的主项目中.使用以下代码加载包:

Nsstring *path = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];"

您现在使用新捆绑包进行设置.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...