在swift中我有两个视图控制器。一个是tableView并显示数组中的数据。在函数调用上,另一个视图控制器调用tableView并使用表视图的新数据传递参数。即使我更新数组buckets
,其中从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)
}
答案 0 :(得分:5)
尝试使用tableView?.beginUpdates()
和tableView?.endUpdates()
- 我发现tableView?.reloadData()
有时会对数据源更新有所了解。
否则,请确保在updateBuckets()
的正确实例上调用BucketTableViewController()
;看起来你在viewDidLoad()中实例化了一个新实例,而不是改变现有实例的内容(正如你可能会做的那样)。
答案 1 :(得分:0)
这一行就在这里:
let buckets = BucketTableViewController()
您正在创建一个全新的BucketTableViewController
实例并更新其存储桶。这不会导致现有BucketTableViewController
更新。您需要弄清楚如何获取对现有视图控制器的引用并更改它。
答案 2 :(得分:-1)
我会像在此答案中所做的那样为你推荐同样的事情:Updating a Table View From a Different File - Cannot invoke 'reloadData' with no arguments