【问题标题】:How can i use storyboard in Cocoa Touch Library我如何在 Cocoa Touch 库中使用故事板
【发布时间】:2019-10-29 19:53:30
【问题描述】:

我已经能够构建一个 Cocoa Touch 库,我打算将其用于在情节提要中呈现 ViewController,但事实证明我无法访问情节提要。我不断收到 NSInvalidArgumentException 错误,原因是:'找不到名为 'MyStoryboard' 的故事板。

let storyboard: UIStoryboard = UIStoryboard(name: "MyStoryboard", bundle: Bundle.main)
viewController.present(cryptoTransactionViewController, animated: true, completion: nil)

【问题讨论】:

    标签: swift cocoa-touch sdk frameworks storyboard


    【解决方案1】:

    在这里,您从应用程序的主包Bundle.main 访问情节提要,并且肯定不存在,因此崩溃

    let storyboard: UIStoryboard = UIStoryboard(name: "MyStoryboard", bundle: Bundle.main)
    

    你需要访问这个库的 bundle ,所以试试

    let libBundle = Bundle(identifier:"com.library")
    let storyboard: UIStoryboard = UIStoryboard(name: "MyStoryboard", bundle:libBundle)
    

    【讨论】:

      【解决方案2】:

      您尝试访问的情节提要不在您的 main 包中,而是在框架的包中。

      所以,您需要做的第一件事就是找到正确的捆绑包……

      let bundleId = "com.your.bundle.id"
      guard let bundle = Bundle.allFrameworks.first(where: { $0.bundleIdentifier == bundleId}) else {
          fatalError("Failed to find bundle with identifier \(bundleId).")
      }
      
      let storyboard: UIStoryboard = UIStoryboard(name: "MyStoryboard", bundle: bundle)
      

      【讨论】:

        【解决方案3】:

        访问情节提要时,确保捆绑包指向您正在处理的项目。

        let bundleId = Bundle(identifier: "com.your.libraryBundle.id)
        

        guard let bundle = Bundle.allFrameworks.first(where: { $0.bundleIdentifier == bundleId}) else { 致命错误(“无法找到带有标识符(bundleId)的包。”) } let storyboard: UIStoryboard = UIStoryboard(name: "MyLibraryStoryboard", bundle: bundle)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-23
          • 1970-01-01
          • 1970-01-01
          • 2010-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-14
          相关资源
          最近更新 更多