【问题标题】:DataSource appears to be working but tableView is not reloadingDataSource 似乎正在工作,但 tableView 没有重新加载
【发布时间】:2015-01-03 17:45:37
【问题描述】:

我遇到了一个问题,我的tableView 没有根据数据源正确更新。我正在使用带有 Storyboard 的选项卡式应用程序结构。

我的总体目标是在第二个选项卡上显示一个tableView,以显示从存储在结构中的数组中删除的项目。项目从第一个选项卡添加到数组中。

有2个ViewControllers(1个用于滚动项目并选择删除它们的界面,1个用于处理tableView)和2个视图(1个用于滚动项目并删除它们的界面,1个用于表视图)。第一个选项卡用于提供删除项目的界面,第二个选项卡用于tableView。

删除和添加到数组功能有效,只是不能在tableView 中显示。

目前,如果我在 "removed items" 数组中对项目进行硬编码,它们会显示在 tableView 中。问题是,当我在第一个ViewController 中将removeItem 函数中的项目添加到数组时,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] = []

}

【问题讨论】:

    标签: ios xcode swift tableview datasource


    【解决方案1】:

    结构实例总是按值传递。所以如果你的代码是这样的:

    var removedTopicsFromList = secondViewController.removedTopicsFromList
    removedTopicsFromList.removedTopics.append("SomeTopic")
    secondViewController.reloadData()
    

    那么你正在改变不同的结构。

    我猜你可能被这个问题困住了。

    【讨论】:

    • 不确定是不是这个问题。数据源显示正确,表视图在数据源更新后不会更新。不过还是谢谢。
    • 你想展示你如何在第一个视图控制器中设置tableview的数据源吗?
    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 2017-09-08
    • 2019-03-03
    • 2019-11-26
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多