【问题标题】:Loading a storyboard from a different Xcode project从不同的 Xcode 项目加载故事板
【发布时间】:2014-03-17 23:29:39
【问题描述】:

我有两个不同但相关的项目。父项目 A 有一个故事板。子项目 B(理论上)扩展了 A 的功能,需要在其 AppDelegate 中实例化 A 的主故事板。在我的 xcode 工作区中,我在子项目 B 中包含了父 A,作为链接项目,我可以看到所有文件。我在应用程序中使用以下代码:didFinishLaunchingWithOptions:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iPhone.storyboard" bundle:[NSBundle mainBundle]];
MainViewController *vc = (MainViewController *)[storyboard instantiateInitialViewController];
_window.rootViewController = vc;
[self.window makeKeyAndVisible];

代码在 storyboardWithName 行运行时失败,我假设是因为 iPhone.storyboard 在 B 中无法立即使用,并且它不知道在 A 中查找它。实际的故事板文件位于外部的不同文件夹中子项目 B 在磁盘上的项目文件夹。

【问题讨论】:

    标签: ios iphone objective-c xcode


    【解决方案1】:

    它与B和A无关。项目中的文件可以位于任何地方。您的错误发生在运行时。它与您正在构建和运行的 应用程序 有关。想想这句话是怎么说的:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iPhone.storyboard" bundle:[NSBundle mainBundle]];
    

    所以你在这里声称在这个应用程序的主包中有一个名为 iPhone.storyboard 的故事板。但是没有。该应用程序正在构建中,您没有做任何事情来将情节提要作为该过程的一部分复制到应用程序的捆绑包中。这就是你需要做的。

    要将情节提要放在主包中,请将其添加到此应用的 Copy Bundle Resources 构建阶段。

    (当然,现在可能还有其他问题,例如,如果这个故事板中提到的类不是这个应用程序的一部分。但这不是你的问题。)

    【讨论】:

    • 另外我认为你不应该在故事板的字符串名称中包含后缀.storyboard
    • 扩展名可能确实是问题所在。见UIStoryboard documentation“参数名称:故事板资源文件的名称不带文件扩展名。”。
    • 这个答案确实很有帮助,谢谢马特。至于扩展,我知道那个问题,我只是为了这个问题而添加了这个,以确保每个人都明白这是一个故事板文件,但看起来我只是增加了更多的混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2015-05-24
    • 2015-10-19
    相关资源
    最近更新 更多