ViewController 查看 Presenter 中的对象数量,但不显示它们
ViewController see count of object in Presenter, but don't display them
我正在将我的测试项目从 SwifUI 重构到 UIKit,一开始虽然我只需要保持我的 Viper 模块不变并更改视图,但我不知道为什么我的 TableViewController 看到(测试使用 print(),每次出现视图时都显示数据已加载)Presenter 中的对象计数,但不显示它们。我还尝试检查我的单元格和表格视图是否正常工作,使用自定义数据是否正常。
class BeersListTableViewController: UITableViewController,BeersListViewProtocol {
var presenter: BeersListPresenterProtocol!
var currentPage: Int = 1
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
title = "All beers"
let nib = UINib(nibName: "BeerCell", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "BeerCell")
}
override func viewWillAppear(_ animated: Bool) {
presenter.loadList(at: currentPage)
print(presenter.beers.count)
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return presenter.beers.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "BeerCell", for: indexPath) as! BeerCell
let beer = presenter.beers[indexPath.row]
cell.beerName.text = beer.name
cell.beerABV.text = presenter.formattedABV(beer.abv)
cell.addToFavoritesButton.setImage(UIImage(systemName: presenter.favoritesButton(beer)), for: .normal)
return cell
}
class BeersListPresenter: BeersListPresenterProtocol{
weak var view: BeersListViewProtocol!
var interactor : BeersListInteractorProtocol!
var router: BeersListRouterProtocol!
var beers = [Beer]()
//MARK: - Load list of beers
func loadList(at page: Int){
interactor.loadList(at: page) { beers in
DispatchQueue.main.async {
self.beers.append(contentsOf: beers)
}
}
}
已解决。可能有人会帮助我的解决方案,我在我的视图控制器中创建了方法,每次更改演示者 属性 时调用 tableview.reloadData()
更新:
在视图控制器中添加了一个功能:
func reload(){
tableView.reloadData()
}
演示者更改:
var beers = [Beer]{
didSet{
view.reload()
}
}
我正在将我的测试项目从 SwifUI 重构到 UIKit,一开始虽然我只需要保持我的 Viper 模块不变并更改视图,但我不知道为什么我的 TableViewController 看到(测试使用 print(),每次出现视图时都显示数据已加载)Presenter 中的对象计数,但不显示它们。我还尝试检查我的单元格和表格视图是否正常工作,使用自定义数据是否正常。
class BeersListTableViewController: UITableViewController,BeersListViewProtocol {
var presenter: BeersListPresenterProtocol!
var currentPage: Int = 1
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
title = "All beers"
let nib = UINib(nibName: "BeerCell", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "BeerCell")
}
override func viewWillAppear(_ animated: Bool) {
presenter.loadList(at: currentPage)
print(presenter.beers.count)
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return presenter.beers.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "BeerCell", for: indexPath) as! BeerCell
let beer = presenter.beers[indexPath.row]
cell.beerName.text = beer.name
cell.beerABV.text = presenter.formattedABV(beer.abv)
cell.addToFavoritesButton.setImage(UIImage(systemName: presenter.favoritesButton(beer)), for: .normal)
return cell
}
class BeersListPresenter: BeersListPresenterProtocol{
weak var view: BeersListViewProtocol!
var interactor : BeersListInteractorProtocol!
var router: BeersListRouterProtocol!
var beers = [Beer]()
//MARK: - Load list of beers
func loadList(at page: Int){
interactor.loadList(at: page) { beers in
DispatchQueue.main.async {
self.beers.append(contentsOf: beers)
}
}
}
已解决。可能有人会帮助我的解决方案,我在我的视图控制器中创建了方法,每次更改演示者 属性 时调用 tableview.reloadData()
更新: 在视图控制器中添加了一个功能:
func reload(){
tableView.reloadData()
}
演示者更改:
var beers = [Beer]{
didSet{
view.reload()
}
}