Swift:tableView.reloadData()表中没有数据

Swift:tableView.reloadData()表中没有数据,swift,tableview,reloaddata,Swift,Tableview,Reloaddata,我的表中的重载数据()有问题。 我已经设置了表格和单元格,添加了表格,甚至为单元格创建了一个单独的类,以防出现问题。 我只是无法将任何数据加载到表中。。。。。我在这里和其他网站上读过问题,但没有一个解决方案能给我答案。。。 我看到它也是一个bug,但它在另一个项目中工作,所以它不是我的Xcode版本。 我已经尝试在viewDidLoad中加载,在cellForRowAt中加载,并使用Dispatch将其放在函数内外的主线程上。我也在绝望中试了一个按钮,但还是不走运。这是我的代码,如果你发现我遗漏

我的表中的重载数据()有问题。 我已经设置了表格和单元格,添加了表格,甚至为单元格创建了一个单独的类,以防出现问题。 我只是无法将任何数据加载到表中。。。。。我在这里和其他网站上读过问题,但没有一个解决方案能给我答案。。。 我看到它也是一个bug,但它在另一个项目中工作,所以它不是我的Xcode版本。 我已经尝试在viewDidLoad中加载,在cellForRowAt中加载,并使用Dispatch将其放在函数内外的主线程上。我也在绝望中试了一个按钮,但还是不走运。这是我的代码,如果你发现我遗漏了什么,我会感谢你的帮助

//
//  VCRoster.swift
//  MC
//
//  Created by James McAdam on 08/07/2018.
//  Copyright © 2018 James McAdam. All rights reserved.
//

import UIKit

class VCRoster: UIViewController, UITableViewDelegate, UITableViewDataSource {

var tableViewData: [Roster] = []

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = rosterTable.dequeueReusableCell(withIdentifier: "rosterCell") as? rosterCell

    cell!.dateLbl.text = tableViewData[indexPath.row].date
    //Have also tried ? with the cell
    cell!.messageLbl.text = tableViewData[indexPath.row].message

    tableView.reloadData()
   return cell!
}


@IBOutlet weak var rosterTable: UITableView!

@IBAction func load(_ sender: UIBarButtonItem) {
      self.rosterTable.reloadData()
}


override func viewDidLoad() {
    super.viewDidLoad()

 //   dispatchMain().async {
 //       self.rosterTable.reloadData()
 //   }

     // self.rosterTable.reloadData()

    getDataFromServer(for: "Bx7faf08A9fYJ7bZCNMUX9EzxYN2") { (result) in
        // Check our result
        switch result {
        case .success(let results):
          //  print("Done")
            self.tableViewData = results.data
            //self.tablewView.reloadData()
            //self.rosterTable.reloadData()
        //    print(results)
        case .failure(let message):
        //    print("Error")
            print(message)
        }
    }

}


}

首先,在
cellForRow

  • 确保表视图的数据源(和委托)已连接到Interface Builder中的视图控制器
  • 删除
    cellForRow中的
    tableView.reloadData()
  • viewDidLoad
    中的完成处理程序中的主线程上调用
    reloadData()


首先,在
cellForRow

  • 确保表视图的数据源(和委托)已连接到Interface Builder中的视图控制器
  • 删除
    cellForRow中的
    tableView.reloadData()
  • viewDidLoad
    中的完成处理程序中的主线程上调用
    reloadData()


首先,您必须在您的案例中设置多个部分,如果一个部分包含行数,那么您必须为tableView设置委托和数据源,因为您使用的是xib或storyboard,请从那里或通过编程方式完成

rosterTable.delegate = self
rosterTable.dataSource = self
确保您的服务器使用正确的数据进行响应,并通过

var tableViewData: [Roster] = [] {
 didSet {
  rosterTable.reloadData()
 }
}

渲染单元格时不要使用重载数据

首先,您必须设置多个部分,如果一个部分包含行数,那么您必须为tableView设置委托和数据源,因为您使用的是xib或storyboard,只需在那里签名或通过编程方式执行即可

rosterTable.delegate = self
rosterTable.dataSource = self
确保您的服务器使用正确的数据进行响应,并通过

var tableViewData: [Roster] = [] {
 didSet {
  rosterTable.reloadData()
 }
}


渲染单元格时不要使用重载数据视图控制器是否设置为tableview的数据源?不要在
tableview(u.tableview:cellForRowAt:)中调用
tableview.reloadData()
。主线程中是否有
getDataFromServer()
闭包?您需要在那里调用
reloadData()
。我在牢房里留下了最后一次换装。在问问题之前我又试了一次。请编辑您的代码以反映我们可以复制的内容。(或者至少,把你尝试过但知道不起作用的事情注释掉。我在
cellForRowAt
上的一个回答中投了高票。我不应该——现在——因为这不是问题所在。)现在,来解决你的实际问题吧?我们是否可以假设问题不是异步调用
getDataFromServer
,而是实际返回数据-没有发生错误-并且您在(a)
result=.success
和(b)
之后尝试了
reloadData
?视图控制器是否设置为tableview的数据源?不要在
tableview(\uTableView:cellForRowAt:)
中调用
tableview.reloadData()
。主线程中是否有
getDataFromServer()
闭包?您需要在那里调用
reloadData()
。我在牢房里留下了最后一次换装。在问问题之前我又试了一次。请编辑您的代码以反映我们可以复制的内容。(或者至少,把你尝试过但知道不起作用的事情注释掉。我在
cellForRowAt
上的一个回答中投了高票。我不应该——现在——因为这不是问题所在。)现在,来解决你的实际问题吧?我们是否可以假设问题不是异步调用
getDataFromServer
,而是实际返回数据-没有发生错误-并且您在(a)
result=.success
和(b)
之后尝试了
reloadData
result
返回了什么吗?那么代码应该可以工作了。重新检查表视图和数据源的连接。行
self.tableViewData=results.data
也应该位于调用
DispatchQueue.main.async
@rmaddy的内部,但不一定。数据源数组与UI不直接相关。实际上它是直接相关的,因为表的重新加载是基于数据源的状态的。假设正在滚动表(当然是在主队列上)。该表需要数据的当前状态。如果在后台修改数据源的状态以准备重新加载表,情况可能会变得糟糕。有一段时间数据源和UI的状态现在不同步。我发现更安全的做法是确保在调用更新视图的同时在主队列上更改数据源。
result
是否返回了一些内容?那么代码应该可以工作了。重新检查表视图和数据源的连接。行
self.tableViewData=results.data
也应该位于调用
DispatchQueue.main.async
@rmaddy的内部,但不一定。数据源数组与UI不直接相关。实际上它是直接相关的,因为表的重新加载是基于数据源的状态的。想象