【问题标题】:Multiple versions of .nib file.nib 文件的多个版本
【发布时间】:2011-10-03 14:57:22
【问题描述】:

有没有办法让两个 .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。

有什么方法可以实现吗?或者管理多个 nib 版本的更好方法?

【问题讨论】:

    标签: iphone objective-c ios xcode xcode4


    【解决方案1】:

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

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

    上面的 sn-p 假设您将目标的 wrapper extension 设置为“skin”并将其命名为“MyBundle”。

    在 Xcode 3 中(我手边没有 4 个),您可以通过转到 Project -> New Target 来添加目标。从 Mac OS X 中选择“可加载捆绑包”(即使您使用的是 iOS。)在我的脑海中,您不需要任何进一步的配置即可使其正常工作,但您必须注意资源在添加它们时正确的捆绑包。

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

    【讨论】:

    • 谢谢!这正是我一直在寻找的。在 Xcode 4 中,我设法通过在 Project Navigator -> Add Target 按钮-> Mac OS X Framework & Library 中选择项目来创建包-> 捆绑。然后我从应用程序的目标 "Copy Bundle Resources" 阶段删除了所有资源文件,并将它们相应地添加到包中。接下来,我将 Bundles 添加到应用程序的 "Target Dependencies" 阶段,并将包从 Project Navigation 中的 Products 组拖到主应用程序中的 "Copy Bundle Resources" .
    • 我必须补充一点,我必须将 Bundle 的 Target 构建设置:Base SDK 更改为 Latest iOSSupported Platforms 更改为 iphonesimulator iphoneos。否则,Bundle 产品将不会与主要目标位于同一目录中。在 “复制捆绑资源” 阶段产生错误。我遇到的另一个问题是笔尖在加载时缓存引用的图像,当我在两个不同的包中有两个同名的图像时,由于按名称缓存,只会显示一个。你有什么优雅的解决方案吗?
    • 不要使用[NSImage imageNamed:],而是使用[NSImage imageWithContentsOfFile:]。它在内存方面效率较低,但可以防止这种情况发生。
    猜你喜欢
    • 2012-04-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2018-02-01
    • 2014-09-26
    • 2019-07-19
    相关资源
    最近更新 更多