Xcode 8.3.3 Swift 3-文件之间不更新变量

Xcode 8.3.3 Swift 3-文件之间不更新变量,swift,model-view-controller,tableview,tableviewcell,Swift,Model View Controller,Tableview,Tableviewcell,我对xcode有一个问题,因为我更新到了8.3.3。我通常使用MCV(模型-视图-控制器)方法,现在,我的变量不会在它们之间更新 情况:我有一个模型(存储所有主要变量和计算函数);TableView控制器(控制TableView)和TableViewCell(设置出口和动作) 目标:在单元格中按下按钮时,应在TableView中添加一行 问题:为什么表视图不能获取Model()变量的新值 为了更好地理解,以下是正在发生的事情的时间表: 运行>在TableViewController中运行view

我对xcode有一个问题,因为我更新到了8.3.3。我通常使用MCV(模型-视图-控制器)方法,现在,我的变量不会在它们之间更新

情况:我有一个模型(存储所有主要变量和计算函数);TableView控制器(控制TableView)和TableViewCell(设置出口和动作)

目标:在单元格中按下按钮时,应在TableView中添加一行

问题:为什么表视图不能获取Model()变量的新值

为了更好地理解,以下是正在发生的事情的时间表:

运行>在TableViewController中运行viewDidLoad>在Model()中更新变量测试>调用cellForRowAt并打印[“1”]>使用1行显示tableView>按按钮>打印[“1”]>将[“2”]添加到模型()>打印[“1”,“2”]>发布通知>viewDidLoad获取通知并打印“重新加载表”>调用cellForRowAt并打印[“1”]>tableView保留1行

下面是我的代码的一个示例:

我有我的模型。斯威夫特:

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()中的变量test

还有我的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”]


感谢您的帮助

这两个模型变量属于不同的类。您的viewController中有var模型,单元格中有&var模型。改变一个不会影响另一个。最好为单元格实现一个委托,其中viewController是委托,按下时单元格会调用它-

protocol MyCellDelegate: class {
    func cellWasPressed()
}
在牢房里-

weak var delegate: MyCellDelegate?
创建单元时,将其设置为viewController

然后在按钮按下方法中,添加-

self.delegate?.cellWasPressed()
在viewController中,实现以下操作-

func cellWasPressed() {
    self.model.test.append("2")
    self.tableView.reloadData()
}

我认为您不需要使用通知,这要简单得多。

这两个模型变量属于不同的类。您的viewController中有var模型,单元格中有&var模型。改变一个不会影响另一个。最好为单元格实现一个委托,其中viewController是委托,按下时单元格会调用它-

protocol MyCellDelegate: class {
    func cellWasPressed()
}
在牢房里-

weak var delegate: MyCellDelegate?
创建单元时,将其设置为viewController

然后在按钮按下方法中,添加-

self.delegate?.cellWasPressed()
在viewController中,实现以下操作-

func cellWasPressed() {
    self.model.test.append("2")
    self.tableView.reloadData()
}

我认为您不需要使用通知,这要简单得多。

谢谢!那很有效!我正在寻找一种避免使用通知的方法!这正合适!非常感谢。那很有效!我正在寻找一种避免使用通知的方法!这正合适!