Swift:如何在每次出现表视图时重新加载新内容(例如数组)?

RjC*_*RjC 5 arrays tableview ios swift

我有一个带有两个视图的选项卡栏:

  • 表格视图
  • 视图控制器添加数据

然后我有一个数组,该数组将从视图控制器中更新为新内容(例如,仅附加新字符串)。

该数组填充表视图。现在,当应用程序启动时,表视图显示所有数组内容,但是当我通过选项卡栏移动到视图控制器、将内容添加到数组并通过选项卡栏移回表视图时,我无法更新表视图以便它从数组中提取新内容。

我尝试在和tableview.reloadData()中使用,但表视图不会重新加载,并且仍然显示它最初在应用程序启动时加载的数据,但不显示新内容。viewDidAppearviewDidLoad

override func viewWillAppear(_ animated: Bool) {
        tableView.reloadData()
        weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]
    }
Run Code Online (Sandbox Code Playgroud)

这就是我填充表格视图的方式:

// MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return weightArray.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier = "FavoriteCell"
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)

        let weights = weightArray[indexPath.row]
        cell.textLabel?.text = weights

        return cell
    }
Run Code Online (Sandbox Code Playgroud)

sta*_*Man 5

您的reloadData()通话是在更新数组之前进行的。

应该是更新数据源后:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]
    tableView.reloadData()    
}
Run Code Online (Sandbox Code Playgroud)

无论如何,您可以使用didSet数据源对象的属性观察器。

//your weightArray declaration
var weightArray = [String]() {
    didSet {
        tableView.reloadData()
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]   
}
Run Code Online (Sandbox Code Playgroud)

这样,每当您更改阵列时,tableView都会重新加载。