表格视图不显示数据,为啥? (斯威夫特 3)

Posted

技术标签:

【中文标题】表格视图不显示数据,为啥? (斯威夫特 3)【英文标题】:Table View doesn't show Data, why? (Swift 3)表格视图不显示数据,为什么? (斯威夫特 3) 【发布时间】:2017-03-30 16:35:46 【问题描述】:

我制作了一个使用表格视图来保存数据的应用。表格视图显示了通过 UserDefaults 保存的数组元素。由于 TableViewControllers 看起来有点难看,所以我做了一点不同:我把一个 TableView 放到了一个普通的 ViewController 中。 我的问题是:尽管我尽我所能让 TableView 显示数据,但它没有,而且我不知道为什么。谁能帮助我? 这是 ViewController 的代码:

class ErfolgreicheChallenges: UIViewController, UITableViewDelegate, UITableViewDataSource 

    @IBOutlet var myTableView: UITableView!

    var data = [String]()

    override func viewDidLoad() 
        super.viewDidLoad()

        myTableView.delegate = self

        data.append("test")
        data.append("lol")

    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return 10
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        myTableView.dataSource = self

        let cell = myTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        cell.textLabel!.text = data[indexPath.row]

        return cell
    

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    


感谢大家观看!祝你有美好的一天

【问题讨论】:

放弃 UITableViewController 可能是一个不错的决定,但使用常规 VC 需要一些额外的步骤。其中最重要的是将tableView的数据源设置为包含发布代码的类。你这样做了吗? 在表格视图中你在哪里调用reloadData() 好吧,当我在viewDidLoad()中将数据源设置为self时,总是会出现'Thread 1'-error之类的,不知道是什么问题...或者do你的意思是别的吗? 试过了,但是当我尝试 reloadData() 时我的应用程序失败了...你认为我需要在哪里调用它? 另外——你不是在表格视图中保存数据,你只是在显示它 【参考方案1】:

viewDidLoad 替换为

override func viewDidLoad() 
    super.viewDidLoad()

    myTableView.dataSource = self
    myTableView.delegate = self

    data.append("test")
    data.append("lol")
    myTableView.reloadData()


并将numberOfRowsInSection替换为

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return data.count
    

并删除cellForRow中的myTableView.dataSource = self

如果代码崩溃,则 myTableView 未在 IB 中连接。

如 cmets 中所述,请考虑使用 UITableViewController,它获得了一个带有预连接数据源和委托的表视图实例。

【讨论】:

如果你想向显示器添加其他控件,使用 UIViewController 和嵌入式 UITableView 没有任何问题 - 但你确实需要连接你的表格视图。 @Russell 不,没有错,但目前看起来只有一个表格视图。【参考方案2】:

您需要在 viewDidLoad 或类似的地方设置数据源和数据委托。

您在 cellForRowAt 中设置数据源,但它永远不会被调用!

【讨论】:

当我在 viewDidLoad() 中将数据源设置为 self 时,我得到一个 'Thread 1'-error 之类的......你知道这可能来自哪里吗?

以上是关于表格视图不显示数据,为啥? (斯威夫特 3)的主要内容,如果未能解决你的问题,请参考以下文章

为啥导航栏中没有显示标题?斯威夫特 3

为啥 laravel 验证不显示错误

如何隐藏不在最后的空单元格表格视图?斯威夫特 3

显示表格内的图像时出错!斯威夫特 3

word为啥不能显示图片

斯威夫特 | UIViewController 不显示为 PopUp 但全屏