我一直致力于通过捆绑xib和下载软件包以及在这些软件包中加载xib来为我的iOS应用程序提供"自定义skinnable"界面.
我已按照这里非常有用的说明进行操作.
我有捆绑下载,并解压缩,可以看到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];
Run Code Online (Sandbox Code Playgroud)
当我将此视图控制器推送到我的堆栈时,我收到此错误:
***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法在bundle中加载NIB:'NSBundle(尚未加载)',名称为'CustomDownloadedXib''
问题似乎是我的包"尚未加载".我尝试通过调用强制我的包加载:
[bundle load]
Run Code Online (Sandbox Code Playgroud)
但这没有用.
我的方法在这里不正确吗?这似乎是直观的方式.
提前致谢!
首先,如果没有正确创建一个包,它将不会被加载.因此,为了创建一个合适的包,下面是创建一个包的步骤:
通过在OS X - > Framework&Libraries下选择名为bundle的模板来添加新目标.
选择新创建的目标并将BaseSDK从OSX更改为最新iOS.
在Build Phrases - > Copy Bundle Resources中添加要从bundle中使用它的.xibs,图像或其他资源.
在Build Phrases中添加CoreFoundation框架 - >使用Libraries链接二进制文件.
编译选择iOS设备的目标.
将新创建的捆绑包从Products目录保存到某个位置.
现在将该包复制到您的主项目中.使用以下代码加载包:
NSString *path = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];"
Run Code Online (Sandbox Code Playgroud)
您现在使用新捆绑包进行设置.
按照此处的说明进行操作:
我只是错误地创建了捆绑包!
不过,您需要在 Xcode 中创建包,因为如果不这样做,它将不会被加载。要创建,请将新目标添加到您的项目中,选择 Framework & Library -> Bundle,然后链接到 Core Foundation。然后将要上传到网络的 xib 添加到目标。构建目标,在 Finder 中显示它,压缩并上传!
| 归档时间: |
|
| 查看次数: |
8904 次 |
| 最近记录: |