为什么我的TableView在VIPER中返回Nil?

时间:2018-11-29 04:21:50

标签: ios swift uitableview

我正在学习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()
}

这是extensionViewController

extension MatchListingViewController: PresenterToViewProtocol{

    func showMatches(match: MatchDetails?, banner: Banner?) {
        matchD = match
        bannerD = banner
        matchTable.reloadData()
    }

    func showError() {
        print("I am there")
    }
}

在这里,当调用函数showMatches时,我得到了数据,但是当我重新加载它时,抛出了一个错误,即matchTable为nil。有帮助吗?

1 个答案:

答案 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()
    }