现在,我有一个工作区,其中有两个项目,一个叫“ProjectOne”,另一个是“ProjectTwo”,如下所示:
他们分别有一个故事板,现在我想通过按下“To Project Two”连接两个故事板,如下所示:
但是当我点击按钮时,它会显示
“由于未捕获的异常而终止应用程序'NSInvalidArgumentException',>原因:'无法在捆绑包中找到名为'two'的故事板NSBundle 8C6A5FDC9E06 / ProjectOne.app>(已加载)'”
有可能吗?我寻求这种方法几天但也不知道...
答案 0 :(得分:6)
如果故事板位于另一个项目/模块中,则需要使用所包含的故事板的完整名称 - 这意味着包括捆绑名称。请参阅下面的图片,了解如何在故事板中进行设置。我已经使用ProjectOne和ProjectTwo创建了一个与项目设置相同的示例设置。
关键是您在Storyboard参考中输入的信息。您还需要包含捆绑名称!仅供参考,我已添加了Adding a Storyboard Reference
的链接修改强>
虽然这有效,但是当您开始使用由视图控制器支持的各种场景构建故事板时,它会导致问题,现在必须将这两个场景链接到两个项目目标。更重要的是,这种关系隐藏在项目的配置细节中。更好的方法是利用工作区并为两个项目使用的资源添加共享文件夹。
接下来,将共享文件夹添加到与ProjectOne和ProjectTwo相同级别的工作区。现在将共享文件夹的引用添加到每个项目,方法是将其拖到项目文件(xcodeproj)上。这会将文件夹添加到项目目标中。
现在每个项目都包含对共享文件夹的引用,现在项目导航器中明确显示了共享关系。
答案 1 :(得分:2)
2.更改Project two
中源文件的名称以避免冲突,
检查他们的目标成员身份到Project one
,将这些更改配置到故事板二。
3. AppDelegate
的{{1}}文件应保持不变。
答案 2 :(得分:1)
这是我发现从项目中引用pod的解决方案 - 您可以从pod(或您的案例中的其他项目)公开捆绑包,然后在需要时访问它。值得一提的是,您想要访问的方法应该是公开的。
static var bundle:NSBundle {
let podBundle = NSBundle(forClass: thisViewController.self)
let bundleURL = podBundle.URLForResource("myPod", withExtension: "bundle")
return NSBundle(URL: bundleURL!)!
}
答案 3 :(得分:0)
如果在调用Segue之前从未加载过要在Storyboard中引用的Bundle,系统将使用主应用程序bundle。虫子还是在苹果方面被忽视了?
要解决此问题,您必须加载捆绑软件。
let bundle = ... {your bundle here}
if !bundle.isLoaded() {
bundle.load()
}
在应用启动时执行它,或者只是确保它在尝试执行segue之前运行。
这些年来,我多次遇到这个问题,但不知道是什么原因造成的。 有一次,segue从同一个ViewController在不同的地方调用了一次,而其他地方则没有。我快疯了! 然后我发现,在进行工作调用之前,需要从此故事板上从代码手动加载一些自定义弹出窗口控制器。在会话期间,这导致了Bundle的负载并“神奇地”解决了问题。