具有自定义数据源的 UITableViewController 不显示单元格

Posted

技术标签:

【中文标题】具有自定义数据源的 UITableViewController 不显示单元格【英文标题】:UITableViewController with custom data source not showing cells 【发布时间】:2016-07-05 19:35:50 【问题描述】:

我目前有一个 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。

【问题讨论】:

【参考方案1】:

您需要存储对 BookmarkDataSource 对象的强引用。 tableView 的数据源随着您发布的代码变为 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")
    

    // ...

【讨论】:

是的!就是这个。谢谢! 我搞砸了 dataSource 变量的创建,但你明白了!【参考方案2】:

我认为您的单元格没有被正确实例化。

尝试替换

let cell = UITableViewCell()

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

【讨论】:

这也是非常重要的,为了减少内存消耗并真正利用 UITableView。然而,这不是数据不显示的原因

以上是关于具有自定义数据源的 UITableViewController 不显示单元格的主要内容,如果未能解决你的问题,请参考以下文章

具有自定义数据源的 UITableViewController 不显示单元格

具有关联数据源的 DataGridView 的自定义列名称

具有客户端验证的自定义数据注释验证属性

具有自定义数据库功能的休眠标准

xml 具有变体的自定义数据馈送

具有自定义委托或数据源的视图控制器的状态保留