为什么在我的框架中无法访问Storyboard_a.storyboard,而无法访问Storyboard_b.storyboard?

时间:2019-05-06 22:15:02

标签: ios swift frameworks storyboard cocoapods

我有一个包含两个故事板的框架:StoryBoard_A.storyboard和StoryBoard_B.storyboard。 我可以到达StoryBoard_A,但不能到达StoryBoard_B

我在主项目中使用框架作为pod。 在我的框架podspec文件中,我有:

s.source_files = "myFramework/**/*.{swift}"
s.resource_bundles = { 'myFramework' => ['myFramework/**/*.{storyboard,xib,xcassets}'] }

我知道两个情节提要板都在myFramework捆绑包中,因为:

  1. 在myFramework的“构建阶段”中,在“复制捆绑包资源”下,我可以看到它们都包含在内。
  2. 在myFramework.framework中,我可以看到:StoryBoard_A.storyboardc和StoryBoard_B.storyboardc
  3. 当我“ pod安装” myFramework作为开发窗格时,我可以在主项目的Project导航器中看到两个情节提要

在myFramework中,从ViewController_1中,我从StoryBoard_A.storyboard启动ViewController_a,从StoryBoard_B.storyboard启动ViewController_b。 我使用相同的技术:

let podBundle = Bundle(for: ViewController_1.self)
let bundleURL = podBundle.url(forResource: "myFramework", withExtension: "bundle")
let bundle = Bundle(url: bundleURL!)!
let storyBoard = UIStoryboard(name: "StoryBoard_A", bundle: bundle)
let viewController_a = storyBoard.instantiateViewController(withIdentifier: "ViewController_a_id") as? ViewController_a

但是当我这样做时:

let storyBoard = UIStoryboard(name: "StoryBoard_B", bundle: bundle)
let viewController_b = storyBoard.instantiateViewController(withIdentifier: "ViewController_b_id") as? ViewController_b

应用程序在第二行中崩溃,并显示以下错误:

  

***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'在捆绑包中找不到名为'StoryBoard_B'的故事板...

我想念什么?

谢谢

2 个答案:

答案 0 :(得分:0)

右键单击Xco​​de中“产品”下的应用,然后在Finder中进行浏览。只需检查StoryBoard_B.storyboardc文件是否存在。如果不存在文件,则需要解决另一个问题。

如果存在文件,请尝试如下所示进行访问。

let podBundle = Bundle(forClass: ViewController_1.self)
let bundleURL = podBundle.resourceURL?.URLByAppendingPathComponent("myFramework.bundle")
let resourceBundle = Bundle(URL: bundleURL!)

答案 1 :(得分:0)

我发现了问题: 由于这是我继承的一段代码,我试图将其合并到myFramework中,所以我不知道在ViewController_b.swift(我试图从情节提要中启动的那个)内部存在的事实:

var storyboard = UIStoryboard(name: "Stroyboard_B", bundle: nil)

在类范围内。

我将其更改为我按照与上述相同的方式创建的分发包,从而解决了该问题。

在我成功尝试从此情节提要中启动其他ViewController之后,我发现了这一点。这使我在ViewController_b内部查看,以了解它比其他视图控制器的功能如何