【发布时间】:2017-06-16 14:54:13
【问题描述】:
我在使用 xcode 时遇到问题,因为我更新到 8.3.3。我通常使用 MCV(模型 - 视图 - 控制器)方法,现在,我的变量没有在它们之间更新。
情况:我有一个模型(存储所有主要变量和计算函数);一个 TableView Controller(控制 Tableview)和 TableViewCell(设置 Outlet 和 actions)
目标:当在单元格中按下按钮时,它应该在 TableView 中添加一行。
问题:为什么表格视图没有获取 Model() 变量的新值。
为了更好地理解,这里是发生了什么的时间表:
运行 > 在 TableViewController 中运行 viewDidLoad > 在 Model() 中更新变量测试 > 调用 cellForRowAt 并打印 ["1"] > 显示带有 1 行的 tableView > 按下按钮 > 打印 ["1"] > 添加 ["2" ] 到 Model() > 打印 ["1","2"] > 发布通知 > viewDidLoad 获取通知并打印“重新加载表” > 调用 cellForRowAt 并打印 ["1"] > tableView 保留 1 行。
这是我的代码的一个示例:
我有我的 Model.Swift:
class Model {
var test : [String] = []
}
我的 TableViewController:
class BudgetTableViewController: UITableViewController {
let model = Model()
override func viewDidLoad() {
super.viewDidLoad()
model.test.append("1")
center.addObserver(forName: NSNotification.Name(rawValue: "reloadTableVIew"), object: appDelegate, queue: queue) {[unowned self] (_) in
print("reloading table")
self.tableView.reloadData()
}
}
为了简化......在部分中我一直返回“1”,对于行我计算 Model() 中的变量测试。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print(model.test) // **ALWAYS PRINT ["1"]**
let cell = tableView.dequeueReusableCell(withIdentifier: "buttonCell", for: indexPath) as! TableViewCell
return Cell
}
还有我的 TableViewCell:
class TableViewCell: UITableViewCell{
let model = BudgetModel()
let notification = Notification(name: Notification.Name(rawValue: "reloadTableVIew"), object: appDelegate)
@IBAction func okButton(_ sender: UIButton) {
print(model.test)
model.test.append("2")
print(model.test)
NotificationCenter.default.post(notification)
}
}
我希望它足够清楚。 关键是,如果我按下按钮 5 次,它会将字符串 5 次添加到数组中(在打印中确认)但是当调用 cellForRowAt 时,它会始终打印 ["1"]。
感谢您的帮助
【问题讨论】:
标签: swift model-view-controller tableview tableviewcell