从不同的Xcode项目加载故事板

我有两个不同但相关的项目。 父项目A有一个故事板。 子项目B(理论上)扩展了A的function,需要在其AppDelegate中实例化A的主要故事板。 在我的xcode工作区中,我已经将父A包含在子项目B中,作为链接项目,我可以看到所有文件。 我在应用程序中使用以下代码: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之外的另一个文件夹中项目文件夹在磁盘上。

它与B和A无关。 项目中的文件可以位于任何地方。 你的错误是在运行时 。 它与您正在构build和运行的应用程序有关 。 想想这条线是什么意思:

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

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

要将故事板放在主包中,请将其添加到此应用的“复制包资源”构build阶段。

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