致命错误:对类使用未实现的初始化程序“init(nibName:bundle:)”

问题描述 投票:0回答:1

我的简单 UIHostingController 代码给出了

致命错误:对类“SwiftUI.UIHostingController”错误使用未实现的初始化程序“init(nibName:bundle:)”。

import UIKit
import SwiftUI

struct SwiftUIView: View {
    var body: some View {
        ZStack {
          Text("annen")
            .font(.headline)
            .fontWeight(.bold)
        }
    }
}

class SwiftUIViewController: UIHostingController<SwiftUIView> {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder, rootView: SwiftUIView())
    }
}

这是我的扩展。在 SceneDelegate 中,它

if let windowScene = scene as? UIWindowScene {
      let window = UIWindow(windowScene: windowScene)

      let mainView = HomeView(vm: HomeView.VM(state: self.state)).environmentObject(self.state)
      window.rootViewController = UIHostingController(rootView: mainView)
      self.window = window
      window.makeKeyAndVisible()
    }

除了这段代码之外,我没有任何其他 UIHostingController 的用法,这是一个错误还是我的错误?

swift swiftui uikit
1个回答
0
投票

您需要重写 UIHostingController 的指定初始值设定项并使用根视图调用 super.init(rootView:) 。

class SwiftUIViewController: UIHostingController<SwiftUIView> {

    init() {
        super.init(rootView: SwiftUIView())
    }

    @objc required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.