UITableViewController,自定义数据源不显示单元格

时间:2016-07-05 19:35:51

标签: ios swift uitableview swift3 xcode8

我目前有一个UITableViewController,它在init函数中设置一个自定义数据源:

class BookmarkTableViewController: UITableViewController {
  var date: Date

  // MARK: - Init
  init(date: Date, fetchAtLoad: Bool) {
    self.date = date
    super.init(style: .plain)
    self.tableView.dataSource = BookmarkDataSource(date: date)
    self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
  }

// ...
}

自定义数据源如下:

class BookmarkDataSource: NSObject {
  let date: Date

  init(date: Date) {
    self.date = date
    super.init()
  }
}

// MARK: - UITableViewDataSource
extension BookmarkDataSource: UITableViewDataSource {
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 3
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    cell.textLabel?.text = "Test content"

    return cell
  }
}

然而,当我在模拟器或设备上运行时,表格视图中没有任何内容。有谁知道我错过了什么?

注意:我正在使用Xcode 8.0 Beta和Swift 3。

2 个答案:

答案 0 :(得分:6)

您需要存储对BookmarkDataSource对象的强引用。使用您发布的代码,tableView的dataSource变为nil。

class BookmarkTableViewController: UITableViewController {
    var date: Date
    var dataSource:BookmarkDataSource

    // MARK: - Init
    init(date: Date, fetchAtLoad: Bool) {
        self.date = date
        super.init(style: .plain)
        dataSource = BookmarkDataSource(date: date)
        self.tableView.dataSource = dataSource
        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }

    // ...
}

答案 1 :(得分:0)

我认为你的细胞没有被正确地实例化。

尝试替换

let cell = UITableViewCell()

let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)