多个版本的.nib文件

时间:2011-10-03 14:57:23

标签: iphone objective-c ios xcode xcode4

有没有办法让两个同名的.nib文件?我正在使用Xcode 4,我希望在不同的文件夹中有多个版本的接口,即MainMenu.xib,所以我可以通过以下方式访问它们:

[[MainMenuViewController alloc] initWithNibName:@"MainMenu" bundle:skinBundle]

我的skinBundle将从路径捆绑:

skinBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"skinFolderPath" ofType:nil]

当我构建应用程序时,所有目录都被展平,结果只有一个MainMenu.nib。当我将文件夹添加为文件夹引用时,将保留目录树,但不会将.xib文件编译为.nib。

有没有办法实现这个目标?或者更好的方法来管理多个版本的笔尖?

1 个答案:

答案 0 :(得分:1)

您可以在Xcode中创建名为“资源包”的其他目标。它们具有bundle结构(如.app或.framework包)但不包含二进制代码。将资源添加到这些包中,将这些目标的产品添加到主目标的“复制包资源”阶段,然后在实例化期间使用这些包使用以下代码:

NSString *skinBundlePath = [[NSBundle mainBundle] pathForResource: @"MyBundle" ofType: @"skin"]; // or whatever it's called
if (skinBundlePath) {
    NSBundle *skinBundle = [NSBundle bundleWithPath: skinBundlePath];
}

上面的代码段假设您将目标的包装器扩展设置为“skin”并将其命名为“MyBundle”。

在Xcode 3中(我没有4个方便),您可以通过转到Project - >来添加目标。新目标。从Mac OS X中选择“可装载捆绑包”(即使你使用的是iOS)。在我的头顶,你不需要任何进一步的配置来使它工作,但你必须注意资源在添加它们时右束。

如果这听起来过于复杂,那么也可以创建一个构建可加载包的新项目,并使其成为主项目的依赖项;再次,将子项目的构建产品添加到主项目的资源“复制捆绑资源”阶段。