You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义UIHostingController报错:未实现init(nibName:bundle:)初始化器

UIHostingController初始化崩溃问题

错误信息

Fatal error: Use of unimplemented initializer 'init(nibName:bundle:)' for class 'SwiftUI.UIHostingController'

相关代码

自定义UIHostingController子类代码

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的使用场景,请问这是Bug还是我代码的问题?


问题原因与修复方案

这是代码问题,不是系统Bug。

问题出在自定义的SwiftUIViewController类中:UIViewController的子类如果实现了init?(coder:),系统在某些场景下会尝试调用init(nibName:bundle:)初始化方法,但UIHostingController并没有默认实现这个方法,因此触发了未实现初始化器的致命错误。

修复代码

修改自定义SwiftUIViewController类,补充必要的初始化方法:

class SwiftUIViewController: UIHostingController<SwiftUIView> {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder, rootView: SwiftUIView())
    }
    
    // 覆盖rootView初始化器
    override init(rootView: SwiftUIView) {
        super.init(rootView: rootView)
    }
    
    // 必须实现nibName初始化器,避免系统调用未实现的方法
    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(rootView: SwiftUIView())
    }
}

如果不需要通过nib方式初始化,也可以让init(nibName:bundle:)直接调用已实现的初始化逻辑,核心是确保所有可能被系统调用的初始化器都有对应实现。


内容的提问来源于stack exchange,提问作者zicxor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:03:18