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

时间:2014-03-17 23:29:39

标签: ios iphone objective-c xcode

我有两个不同但相关的项目。父项目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中查找它。实际的storyboard文件位于外面的不同文件夹中子项目B的磁盘上的项目文件夹。

1 个答案:

答案 0 :(得分:3)

它与B和A无关。项目中的文件可以位于任何位置。您的错误发生在运行时。它与您正在构建和运行的 app 有关。想想这条线说的话:

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

所以你在这里声称在这个应用程序的主要包中有一个名为 iPhone.storyboard 的故事板。但事实并非如此。应用程序正在构建,您没有做任何事情导致故事板被复制到应用程序的包中作为该过程的一部分。这就是你需要做的。

要将故事板放在主包中,请将其添加到此应用程序的Copy Bundle Resources构建阶段。

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