【发布时间】:2016-09-17 15:13:54
【问题描述】:
我正在尝试遵循此处看到的模式:https://www.objc.io/issues/1-view-controllers/lighter-view-controllers/ 并且还在这里查看了此问题:Separating Data Source to another class in Swift
我有以下代码:
class ApplicationsViewController: UIViewController {
@IBOutlet var tableView: UITableView!
let tableViewDataSource = ApplicationTableDataSource()
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init?(coder aDecoder: NSCoder) {
//fatalError("init(coder:) has not been implemented")
super.init(coder: aDecoder)
}
override func viewDidLoad() {
setupView()
}
func setupView() {
tableView.dataSource = tableViewDataSource
}
}
但是,我不完全了解将数据通信/传递到数据源的最佳方式是什么。
作为一个例子,让我们假设应用程序启动并且我们的数据源中没有数据。在我们的 ApplicationTableDataSource 类中,我们有一个名为 setApplicationData 的方法。在 viewController 中,我们单击添加按钮,该按钮为作业添加新应用程序:
func buttonPressed() {
let data = NSData()
//Here we want to add the data to array in data source
// We can't do the following as tableView.dataSource doesn't know about the setApplicationData method:
tableView.dataSource.setApplicationData(data)
// We could do:
tableViewDataSource.setApplicationData(data)
}
我不确定这是否是更新数据源的最佳方式。
有没有更好的方法来处理更新数据源?
【问题讨论】:
-
您使用的实际数据源是什么?它只是一个静态数组,从核心数据中提取的数据,一个网络请求吗? UITableViewDataSourceDelegate 提供了向表格视图提供数据源所需的一切,您无需设置数据,只需告诉表格视图发生了变化。
-
是的,这是有道理的。这将是核心数据。然而,这更像是一个笼统的问题。有人使用按钮添加内容。控制器处理按钮按下。但是,需要更新底层模型,在这种情况下,它是 dataSource 类中的一个数组。这将如何运作?
-
这是否意味着数据源类直接与核心数据或网络层对话?
标签: ios swift uitableview design-patterns datasource