我如何在 Cocoa Touch 库中使用故事板

Posted

技术标签:

【中文标题】我如何在 Cocoa Touch 库中使用故事板【英文标题】:How can i use storyboard in Cocoa Touch Library 【发布时间】: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)

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于我如何在 Cocoa Touch 库中使用故事板的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Cocoa Touch 框架在应用程序中保持最新

使用 Xcode 故事板会导致 Xcode 冻结,并且 Interface Builder Cocoa Touch Tool 飙升至 %99

Cocoa Touch:iPad 表格网格布局

如何使用 Xcode 4 在 Cocoa Touch 单元测试包中创建应用程序测试?

如何解决 Cocoa touch 框架中的符号名称冲突

Cocoa Touch:每次点击标签栏的标签时,如何更新表格视图?