ios - 为什么我应该将自定义 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
}
}
我的问题是:
- 为什么我应该声明
MyDataSource
为存储财产? - 如果我使用局部变量,我的 tableView 什么时候会丢失数据源?
解决方案
问题是,如果您在 中声明数据源常量viewDidLoad
,只要此方法中的代码运行,您的表视图就会引用您的自定义数据源。所以当viewDidLoad
返回时,数据源就丢失了。
推荐阅读
- java - Android:如何根据设备时区获取默认日期格式
- flutter - 提供者:查找已停用小部件的祖先是不安全的
- pdf - 找出pdf有什么问题
- c++ - 最佳实践:c++ 中的额外方法
- data-visualization - 用于不同线条的多个 HoverTools 未在图上呈现
- python - Python 生成一个大文本文件
- svg - 如何在表格乳胶中包含 SVG 图片?
- google-cloud-platform - 配置谷歌云 sql 代理后 Pod 无法从 GCR 中提取图像
- forms - 输入组前置 - 引导程序 - 可以在输入侧包含重置按钮吗?
- python - Django-用户发布错误