ios - 初始化(编码器:) has not Implement

标签 ios swift xcode viper-architecture

我正在使用 VIP Clean 创建应用程序,但在调用 LoginRouter 上的 HomeViewController 时遇到问题。

我尝试了几种方法,实例化 homeviewcontroller 并传递 HomeViewController 初始化信息,如下所示: let homeViewController = HomeViewController(interactor: HomeInteractor(repository: HomeRepository(), user: user), router: HomeRouter(导航 Controller :navigationController),演示者:HomePresenter())

我收到同样的消息,但我不知道如何解决它......

登录路由器:

import UIKit

@objc protocol LoginRouting{
    func routeToHome(login:LoginViewController, user: UserRealm)
}

protocol LoginDataPassing{
    var dataStore: LoginDataStore? { get }
}
class LoginRouter: NSObject, LoginRouting {
//MARK: - Navigation init

    weak var viewController: LoginViewController?
    var dataStore: LoginDataStore?

    var navigationController = UIViewController()

    init(navigationController: UIViewController){
        self.navigationController = navigationController
    }

     //MARK: - Routing and Navigations

    func routeToHome(login: LoginViewController, user: UserRealm) {
        login.dismiss(animated: true, completion: nil)
    
        let home = 
                UIStoryboard(name:"Main",bundle:nil).instantiateViewController(identifier: 
                "HomeViewController")
    
        UIApplication.topViewController()?.present(home, animated: true, completion: nil)
    
     }
  }

HomeViewController:

import UIKit


protocol HomeDisplayLogic: class{
    func displaySomething(viewModel: Home.ViewModel)
}


class HomeViewController: UIViewController, HomeDisplayLogic {

@IBOutlet weak var usernameLb: UILabel!
@IBOutlet weak var userAccontLb: UILabel!
@IBOutlet weak var userBalance: UILabel!
@IBOutlet weak var tableview: UITableView!




var router: HomeRouter?
private var interector: HomeInteractor
private var presenter: HomePresenter
private var tableViewDataSource: HomeDataSource?

init(interactor: HomeInteractor, router: HomeRouter, presenter: HomePresenter) {
    self.interector = interactor
    self.interector.presenter = presenter
    self.presenter = presenter
    self.router = router
    super.init(nibName: nil, bundle: nil)
}

required init?(coder aDecoder: NSCoder) {
     fatalError("init(coder:) has not been implemented")
  }

 
 // MARK: - View lifecycle



   override func viewDidLoad() {
       
       populateInformations()
       setupView()
           
      }
   
   private func setupView() {
        presenter.viewController = self
          
        HomeDataSource.setupHome(tableView: tableview)
        tableViewDataSource = HomeDataSource(presenter: presenter)
        tableview.dataSource = tableViewDataSource
        tableview.delegate = tableViewDataSource
      }
 
 // MARK: - PopulateInformations
 
 func populateInformations(){
    let request = Home.Request(userId: interector.user.userId ?? "1.0")
    interector.getInfoStatements(request: request)
 }

   func displaySomething(viewModel: Home.ViewModel) {
    
  }

 }

当我调用 Home 时,我收到此消息: fatal error :init(coder:) 尚未实现:文件

有人可以向我解释什么可能是错误的或者如何正确地将信息从一个 View Controller 传递到另一个 View Controller 吗?

最佳答案

因为您从 Storyboard启动 viewController,所以

required init?(coder aDecoder: NSCoder)

将被触发。它尚未实现,因此会崩溃。

要修复它,您可以从 viewController 中删除两个 init 方法 然后,您可以将其设置为可选并将其设置为普通属性,而不是从 init 方法设置交互器、路由器。

关于ios - 初始化(编码器:) has not Implement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62551320/

相关文章:

ios - swift ,SpriteKit : how to save the whole progress of a scene

ios - 调整 UITextField 的宽度以填充横向工具栏

ios - NSInvalidArgumentException,原因 : '-[NSNull isEqualToString:]

ios - Firebase 的 snapshot.value 转换为 Bool 突然返回 nil

ios - NSManagedObject 和 Codable 用于存储在服务器和本地存储中的类

ios - 如何在 Swift 中将多个重叠的 UIImage 合并为一个 UIImage?

ios - 崩溃 ERROR_CGDataProvider_BufferIsNotReadable + 12,CGDataProviderRetainBytePtr + 216

ios - 无法解决错误 : Unable to resolve module `./node_modules/react-native/packager/src/components` React Native

ios - 类似于 UILabel 的自动布局中自定义 View 的 Storyboard 设置宽度/高度

ios - 不将 WKWebView 保留在安全区域内的约束