【发布时间】:2021-04-18 18:51:58
【问题描述】:
我正在构建一个单独的功能作为 swift 包。包中有一个视图控制器及其故事板。我在实例化和呈现视图控制器时遇到问题。我收到此错误:
在捆绑包 NSBundle 中找不到名为“MyIdCardVC”的情节提要...
MyIdCardVC.swift 和 MyIdCardVC.storyboard 都被添加到包中。
这是 Package.swift 声明的一部分:
let package = Package(
name: "IDCard",
platforms: [
.iOS(.v11)
],
products: [
.library(name: "IDCard", targets: ["IDCard"]),
],
我正在从我的应用程序中展示包的视图控制器,如下所示:
import UIKit
import IDCard
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let vc = IDCard.MyIdCardVC.getStoryboardVC()
present(vc, animated: true, completion: nil)
}
}
“getStoryboardVC”是包中声明的静态扩展方法
public extension UIViewController{
public static func getStoryboardVC() -> UIViewController {
let storyboard = UIStoryboard(name: String(describing: self), bundle: nil)
return storyboard.instantiateInitialViewController()!
}
这里是 MyIDCardVC.storyboard 的外观:
【问题讨论】:
-
在您的
getStoryboardVC函数中,尝试指定一个捆绑包。您可以使用 NSBundle 的init(for:)和self.class来获取特定 VC 的捆绑包。 Docs(对任何语法怪异表示歉意。我是 ObjC 人)。 -
感谢您的建议,不幸的是我没有这样做: let bundle = Bundle(for: self) 。然后让 storyboard = UIStoryboard(name: String(describing: self), bundle: bundle)
标签: ios swift storyboard swift-package-manager