我如何在 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 库中使用故事板的主要内容,如果未能解决你的问题,请参考以下文章
使用 Xcode 故事板会导致 Xcode 冻结,并且 Interface Builder Cocoa Touch Tool 飙升至 %99