【问题标题】: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() 时我的应用程序失败了...你认为我需要在哪里调用它?
  • 另外——你不是在表格视图中保存数据,你只是在显示它

标签: ios objective-c uitableview swift3 userdefaults


【解决方案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 之类的......你知道这可能来自哪里吗?
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 2017-11-14
相关资源
最近更新 更多