在另一个项目/包中使用故事板对故事板的引用显示已损坏

现在我有一个里面有两个工程的工作空间,一个是“ProjectOne”,另一个是“ProjectTwo”,如下图所示:

图片

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

图片

但是当我点击button,它显示

“终止应用程序,由于未捕获的exception'NSInvalidArgumentException',>原因:'无法find一个名为'two'的捆绑包NSBundle 8C6A5FDC9E06 / ProjectOne.app>(加载)'”

有没有可能做到这一点? 我寻求几天的方法,但也不知道…

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

在这里输入图像说明

关键是你放在Storyboard参考中的信息。 您还需要包含软件包名称! 仅供参考,我已经添加了一个添加一个故事板参考的链接

在这里输入图像说明

编辑

虽然这起作用,但随着您开始使用由视图控制器支持的各种场景来构build故事板,现在必须链接到两个项目目标,这会导致问题发生。 更重要的是,这种关系隐藏在项目的configuration细节中。 更好的方法是使用工作区并为两个项目使用的资源添加一个共享文件夹。

在这里输入图像说明

接下来将共享文件夹添加到与ProjectOne和ProjectTwo相同级别的工作区中。 现在,通过将每个项目的共享文件夹拖放到项目文件(xcodeproj)中,添加对该项目的引用。 这会将该文件夹添加到您的项目目标。

在这里输入图像说明

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

在这里输入图像说明

1.你可以像这样添加故事板的目标会员:
目标会员

2.在Project two更改源文件的名称以避免碰撞,请检查其目标成员为Project one ,将这些更改configuration为故事板2。

3. Project two AppDelegate文件应保持不变。

这是我从一个项目中引用pod的解决scheme – 您可以从pod(或您的案例中的其他项目)公开该捆绑包,然后在需要时访问它。 也许值得一提的是你想访问的方法应该是公开的。

  static var bundle:NSBundle { let podBundle = NSBundle(forClass: thisViewController.self) let bundleURL = podBundle.URLForResource("myPod", withExtension: "bundle") return NSBundle(URL: bundleURL!)! }