使用对不同项目/包中的故事板的故事板引用显示为

时间:2016-04-22 01:42:36

标签: ios xcode uistoryboard

现在,我有一个工作区,其中有两个项目,一个叫“ProjectOne”,另一个是“ProjectTwo”,如下所示:

image

他们分别有一个故事板,现在我想通过按下“To Project Two”连接两个故事板,如下所示:

image

但是当我点击按钮时,它会显示

  

“由于未捕获的异常而终止应用程序'NSInvalidArgumentException',>原因:'无法在捆绑包中找到名为'two'的故事板NSBundle 8C6A5FDC9E06 / ProjectOne.app>(已加载)'”

有可能吗?我寻求这种方法几天但也不知道...

4 个答案:

答案 0 :(得分:6)

如果故事板位于另一个项目/模块中,则需要使用所包含的故事板的完整名称 - 这意味着包括捆绑名称。请参阅下面的图片,了解如何在故事板中进行设置。我已经使用ProjectOne和ProjectTwo创建了一个与项目设置相同的示例设置。

enter image description here

关键是您在Storyboard参考中输入的信息。您还需要包含捆绑名称!仅供参考,我已添加了Adding a Storyboard Reference

的链接

enter image description here

修改

虽然这有效,但是当您开始使用由视图控制器支持的各种场景构建故事板时,它会导致问题,现在必须将这两个场景链接到两个项目目标。更重要的是,这种关系隐藏在项目的配置细节中。更好的方法是利用工作区并为两个项目使用的资源添加共享文件夹。

enter image description here

接下来,将共享文件夹添加到与ProjectOne和ProjectTwo相同级别的工作区。现在将共享文件夹的引用添加到每个项目,方法是将其拖到项目文件(xcodeproj)上。这会将文件夹添加到项目目标中。

enter image description here

现在每个项目都包含对共享文件夹的引用,现在项目导航器中明确显示了共享关系。

enter image description here

答案 1 :(得分:2)

1.您可以像这样添加故事板的目标会员资格:
Target Membership

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的负载并“神奇地”解决了问题。