【问题标题】: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)