Ios 创建后快速刷新TableView

Ios 创建后快速刷新TableView,ios,swift,uitableview,swift2,Ios,Swift,Uitableview,Swift2,在swift中,我有两个视图控制器。一种是tableView,显示数组中的数据。在函数调用中,另一个视图控制器调用tableView,并为tableView传递带有新数据的参数。即使在我更新数组bucket时,从TableView中获取数据的位置也不会更新。如何让程序重新加载其数据 表格视图 import Foundation import UIKit class BucketTableViewController: UITableViewController { var buckets

在swift中,我有两个视图控制器。一种是tableView,显示数组中的数据。在函数调用中,另一个视图控制器调用tableView,并为tableView传递带有新数据的参数。即使在我更新数组
bucket
时,从TableView中获取数据的位置也不会更新。如何让程序重新加载其数据

表格视图

import Foundation
import UIKit
class BucketTableViewController: UITableViewController {
    var buckets = ["A", "B", "C"]
    override func viewDidLoad() {
    }
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return buckets.count
    } 
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = buckets[indexPath.row]
        return cell
    }
    func updateBuckets(newBucket: NSArray) {
        buckets = newBucket as! [String]
        self.tableView?.reloadData()
    } 
}
我可以验证是否从另一个视图控制器调用了updateBuckets

其他视图控制器

    var bigArray = ["M", "A", "R", "C"]

override func viewDidLoad() {
    super.viewDidLoad()
    let buckets = BucketTableViewController()
    buckets.updateBuckets(bigArray)

}

我想为您推荐与我在这里的回答相同的东西:

尝试使用
tableView?.beginUpdates()
tableView?.endUpdates()
——我发现
tableView?.reloadData()
有时会对数据源更新很挑剔

否则,请确保正在对
BucketTableViewController()
的正确实例调用
updateBuckets()
;看起来您在viewDidLoad()中实例化了一个新实例,而不是更改现有实例的内容(您可能会这样做)。

这一行就在这里:

let buckets = BucketTableViewController()

您正在创建一个全新的
BucketTableViewController
实例并更新其bucket。这不会导致现有的
BucketTableViewController
更新。您需要弄清楚如何获取对现有视图控制器的引用并进行更新。

您是否检查过,在调用updateBuckets时tableView已经存在?@freytag我只是将updateBuckets放入延迟方法中,这并没有改变结果。因此,是的,tableView已经创建完毕。如果您检查了tableView的委托和数据源是否为nil?
reloadData()
保证工作正常。如果它不起作用,有些东西就严重损坏了。如果没有其他问题,是的,它会一直起作用——我同意,这个案例似乎很简单。错误可能是OP在BucketTableViewController()的错误实例上调用了updateBuckets()。@KevinZhang我在类中创建了BucketTableViewController()的实例,并在调用中引用该实例。如何在不创建新类的情况下访问tableview类?@KevinZhang如果删除BucketTableViewController(),则无法调用updateBuckets。[我想]我需要先实例化一个变量,在哪里显示表视图控制器?在显示表视图的视图控制器中,您应该存储一个跟踪表视图控制器的公共变量,然后修改该实例。也许您可以提供一些帮助,帮助“弄清楚如何获取对现有视图控制器的引用”