我正在使用 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/