首页 > 解决方案 > 为什么我应该将自定义 dataSource 对象声明为存储属性?

问题描述

我为我的 tableView 使用自定义 dataSource 对象:

class MyDataSource: NSObject, UITableViewDataSource {
  // ...
}

它在这段代码中运行良好:

class ViewController: UIViewController {
  @IBOutlet weak var tableView: UITableView! 
  // Declare as stored property
  let dataSource = MyDataSource()

  override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = dataSource
  }
}

但是 tableView 在此代码中没有显示任何内容(=MyDataSource未调用方法):

class ViewController: UIViewController {
  @IBOutlet weak var tableView: UITableView! 

  override func viewDidLoad() {
    super.viewDidLoad()

    // Declare as local variable
    let dataSource = MyDataSource()
    tableView.dataSource = dataSource
  }
}

我的问题是:

标签: iosswiftuitableview

解决方案


问题是,如果您在 中声明数据源常量viewDidLoad,只要此方法中的代码运行,您的表视图就会引用您的自定义数据源。所以当viewDidLoad返回时,数据源就丢失了。


推荐阅读