我遇到了tableView
根据数据源正确更新的问题。我正在使用带有故事板的标签式应用程序结构。
我的总体目标是在第二个选项卡上显示一个tableView
,显示从存储在结构中的数组中删除的项目。这些项目将从第一个选项卡添加到数组中。
有2个ViewControllers
(1用于滚动项目并选择删除它们,1用于处理tableView)和2个视图(1用于滚动项目并删除它们的界面和1对于tableView)。第一个选项卡用于提供用于删除项目的界面,第二个选项卡用于tableView
。
删除和添加到数组功能是有效的,而不是在tableView
中显示它。
目前,如果我在"已移除的项目" 数组中对项目进行硬编码,则它们会显示在tableView
中。问题是,当我从第一个removeItem
中的ViewController
函数向数组添加项目时,tableView
不会更新,只会显示硬编码项目。
这使我假设我正确地拥有了我的数据源和委托设置,因为tableView
正在从预期的数据源获取数据。问题是,当用户使用新项目更新数组时,它没有更新。
我尝试使用self.tableView.reloadData()
但没有成功。我可能不会在正确的位置打电话。
我不确定断开连接的位置。
这是我的第二个控制tableView的视图控制器
class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
let cellIdentifier = "cellIdentifier"
var removedTopicsFromList = containerForRemovedTopics()
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView?.registerClass(UITableViewCell.self, forCellReuseIdentifier: self.cellIdentifier)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// UITableViewDataSource methods
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return removedTopicsFromList.removedTopics.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier(self.cellIdentifier) as UITableViewCell
cell.textLabel!.text = self.removedTopicsFromList.removedTopics[indexPath.row]
return cell
}
这是存储删除短语的结构
struct containerForRemovedTopics {
var removedTopics: [String] = []
}
答案 0 :(得分:0)
结构实例总是按值传递。因此,如果您的代码类似于:
var removedTopicsFromList = secondViewController.removedTopicsFromList
removedTopicsFromList.removedTopics.append("SomeTopic")
secondViewController.reloadData()
然后你正在改变不同的结构。
我猜你可能会遇到这个问题。