我正在学习VIPER。我已经成功处理了View->Presnter->Interactor
的数据并从Interactor->Presenter->View
返回了数据。数据已成功返回给我,并且在此extension
中,我试图重新加载数据。
当我尝试重新加载数据时,TableView
为零。为什么没有?当我使用MVC模式时,没有看到TableView
变为nil并且一切正常。有任何线索吗?
这是我的TableView
@IBOutlet weak var matchTable: UITableView!
它已连接到File Owner
。
override func viewDidLoad() {
super.viewDidLoad()
setup()
matchTable.delegate = self
matchTable.dataSource = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
presentor?.initiateFetch()
}
这是extension
至ViewController
。
extension MatchListingViewController: PresenterToViewProtocol{
func showMatches(match: MatchDetails?, banner: Banner?) {
matchD = match
bannerD = banner
matchTable.reloadData()
}
func showError() {
print("I am there")
}
}
在这里,当调用函数showMatches
时,我得到了数据,但是当我重新加载它时,抛出了一个错误,即matchTable
为nil。有帮助吗?
答案 0 :(得分:1)
我认为您忘记了注入演示者或初始化协议。 nil并非来自tableView,需要更多代码才能确切了解此处的错误。
在VC类中:
todos;
constructor(private todoService: TodoService, ...) {}
...
this.todoService.todos$.subscribe(todos => this.todos = todos);
在演讲者课程中:
extension MatchListingViewController: PresenterToViewProtocol
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.presentor?.initProtocol(self)
}
然后
func initProtocol(_ protocol: PresenterToViewProtocol) {
self.protocol = protocol
self.initiateFetch()
}