【问题标题】:Missing argument for parameter 'coder' in call, in UIViewControllerRepresentable struct在 UIViewControllerRepresentable 结构中,调用中缺少参数“编码器”的参数
【发布时间】:2020-11-12 18:16:05
【问题描述】:

我正在尝试使用 UIViewControllerRepresentable 将 UITabBarController 包装在 SwiftUI 视图中,但遇到了一个我好几天都无法解决的问题。我已经查看了每一个可能的线程,并尝试了所有提出的解决方案,但没有运气。任何帮助将不胜感激。

TabViewController.swift

import UIKit
import ResearchKit
import CareKit
import SwiftUI

struct TabBarView: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> UITabBarController {
        let tabBarViewController = TabBarViewController()
        return tabBarViewController
    }
    
    func updateUIViewController(_ uiViewController: UITabBarController, context: Context) {
        
    }
    
    typealias UIViewControllerType = UITabBarController
    
    
}

class TabBarViewController: UITabBarController {
  fileprivate let carePlanStoreManager = CarePlanStoreManager.sharedCarePlanStoreManager
  fileprivate let carePlanData: CarePlanData
  fileprivate var symptomTrackerViewController: OCKSymptomTrackerViewController? = nil
  fileprivate var insightsViewController: OCKInsightsViewController? = nil
  fileprivate var insightChart: OCKBarChart? = nil
  
  required init?(coder aDecoder: NSCoder) {
    carePlanData = CarePlanData(carePlanStore: carePlanStoreManager.store)

    super.init(coder: aDecoder)

    carePlanStoreManager.delegate = self
    carePlanStoreManager.updateInsights()

    let careCardStack = createCareCardStack()
    let symptomTrackerStack = createSymptomTrackerStack()
    let insightsStack = createInsightsStack()
    let connectStack = createConnectStack()
    
    self.viewControllers = [careCardStack,
                            symptomTrackerStack,
                            insightsStack,
                            connectStack]
    
    tabBar.tintColor = UIColor.systemTeal
    tabBar.barTintColor = UIColor.white
  }

我还附上了显示确切错误的屏幕截图。

【问题讨论】:

  • 你为什么感到惊讶?您实现了init(coder:),现在这是您拥有的唯一初始化程序。当您说TabBarViewController() 时,您正在调用不同的初始化程序init(),但它并不存在。就好像你对我说“来,拿这双蓝鞋”然后又说“请把红鞋给我”。什么红鞋?
  • 哈哈我喜欢这个比喻,明白你的意思。我试过初始化它并插入各种参数,但没有运气。如何在结构中插入相同的初始化程序?

标签: swift xcode uiviewcontroller swiftui nscoder


【解决方案1】:

尝试将所有内容移入init,如下所示(在这种情况下您不需要编码器)

class TabBarViewController: UITabBarController {
    fileprivate let carePlanData: CarePlanData
    fileprivate var symptomTrackerViewController: OCKSymptomTrackerViewController? = nil
    fileprivate var insightsViewController: OCKInsightsViewController? = nil
    fileprivate var insightChart: OCKBarChart? = nil
    
    fileprivate let carePlanStoreManager = CarePlanStoreManager.sharedCarePlanStoreManager
    init() {
        carePlanData = CarePlanData(carePlanStore: carePlanStoreManager.store)
        
        super.init(nibName: nil, bundle: nil)
        
        carePlanStoreManager.delegate = self
        carePlanStoreManager.updateInsights()
        
        let careCardStack = createCareCardStack()
        let symptomTrackerStack = createSymptomTrackerStack()
        let insightsStack = createInsightsStack()
        let connectStack = createConnectStack()
        
        self.viewControllers = [careCardStack,
                                        symptomTrackerStack,
                                        insightsStack,
                                        connectStack]
        
        tabBar.tintColor = UIColor.systemTeal
        tabBar.barTintColor = UIColor.white
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

【讨论】:

    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多