我在表中的reloadData()有麻烦。 我已经设置了表和单元格,并添加了表,甚至为该单元格创建了单独的类,以防出现问题。 我只是无法将任何数据加载到表中.....我已经在这里和其他站点上阅读了问题,但是没有一种解决方案能给我解决方案... 我看到它也是一个错误,但是它在另一个项目中工作,因此不是我的Xcode版本。 我曾尝试在cellForRowAt内部的viewDidLoad中加载,并且还使用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)
}
}
}
}
答案 0 :(得分:2)
首先从不,从不,从不呼叫reloadData()
中的cellForRow
tableView.reloadData()
中的cellForRow
reloadData()
的完成处理程序中的主线程上调用viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
getDataFromServer(for: "Bx7faf08A9fYJ7bZCNMUX9EzxYN2") { (result) in
// Check our result
switch result {
case .success(let results):
self.tableViewData = results.data
DispatchQueue.main.async {
self.rosterTable.reloadData()
}
case .failure(let message):
print(message)
}
}
}
答案 1 :(得分:0)
首先,在这种情况下,您必须设置多个部分,一个部分包含行数,然后必须为tableView设置委托和数据源,因为您使用的是xib或Storyboard,只需从那里签名或通过编程方式
rosterTable.delegate = self
rosterTable.dataSource = self
确保您的服务器使用正确的数据进行响应并通过以下方式提取
var tableViewData: [Roster] = [] {
didSet {
rosterTable.reloadData()
}
}
不要在渲染单元格时使用reloadData