(快速)表视图控制器。未触发cellForRowAt

时间:2020-04-18 18:55:35

标签: ios swift uitableview

问题: tableView Controller在表中未显示categoryArray项。

诊断:
-触发第一个tableView numberOfSections方法并返回1(print(categoryArray.count)
-第二个tableView cellForRowAt方法永远不会启动(打印语句无效)
-Table View Controller不需要委托。但是,我试图添加tableView.delegate = self
-重新启动X代码没有帮助

问题: 为什么第二个tableView方法不起作用以及如何解决?

import UIKit
import CoreData

class CategoryViewController: UITableViewController {

    var categoryArray = [Category]()
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    override func viewDidLoad() {
        super.viewDidLoad()
        loadCategories()
    }

    // MARK: - TableView DataSource Methods

    override func numberOfSections(in tableView: UITableView) -> Int {
        return categoryArray.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        print("this should print")
        let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryCell", for: indexPath) as! CategoryCell

        let category = categoryArray[indexPath.row]
        cell.categoryNameTextField.text = category.name

        return cell
    }

1 个答案:

答案 0 :(得分:1)

  1. 代替numberOfSections实施numberOfRows

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return categoryArray.count
    }
    
  2. viewDidLoad末尾重新加载表格视图

    override func viewDidLoad() {
        super.viewDidLoad()
        loadCategories()
        tableView.reloadData()
    }
    

    如果loadCategories()包含某些内容,则在加载数据时异步重新加载表视图。