【问题标题】:Why can I reach Storyboard_a.storyboard and fail to reach Storyboard_b.storyboard in my framework?为什么我可以在我的框架中访问 Storyboard_a.storyboard 而无法访问 Storyboard_b.storyboard?
【发布时间】:2019-05-06 22:15:01
【问题描述】:

我有一个包含两个故事板的框架: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 Build Phases 的 Copy Bundle Resources 下,我可以看到它们都包含在内。
  2. 在 myFramework.framework 中我可以看到:StoryBoard_A.storyboardc 和 StoryBoard_B.storyboardc
  3. 当我将 myFramework 'pod install' 作为开发 pod 时,我可以在主项目的项目导航器中看到两个故事板

在 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”的情节提要...

我错过了什么?

谢谢

【问题讨论】:

    标签: ios swift frameworks storyboard cocoapods


    【解决方案1】:

    在 Xcode 中的 Products 下右键单击您的应用,然后在 Finder 中探索它。只需检查 StoryBoard_B.storyboardc 文件是否存在。如果文件不存在,则需要解决不同的问题。

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

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

    【讨论】:

    • 在 myApp.app 中,我可以看到 Framework 目录,其中包含我使用的所有框架,除了 myFramework.framework。 myFramework.bundle 位于与 Framework 目录相同的路径中。当我查看 myFramework.bundle 内部时,我确实可以看到 Storyboard_A.storyboardcStoryboard_B.storyboardc 但这并不能解释为什么我可以访问 Storyboard_A.storyboard 但无法访问 Storyboard_B。故事板。它们都包含在 myFramework.bundle 中以您建议的方式创建 Bundle 对象不起作用:(
    【解决方案2】:

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

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

    在类范围内。

    我将其更改为我创建的捆绑包,并以与上述相同的方式解决了问题。

    我在成功尝试从此情节提要启动其他 ViewController 后发现了这一点。这让我查看了 ViewController_b 内部,看看它与其他视图控制器相比有何延迟

    【讨论】:

      猜你喜欢
      • 2015-01-11
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多