【发布时间】:2016-10-15 09:39:50
【问题描述】:
我的 TableView 是空的/只显示空白单元格(屏幕截图) 我用 TableViewController 和用 TableView 的 ViewController 都试过了——两者都显示了相同的结果。 enter image description here
所以我试图确定问题的确切位置,似乎没有读取“for-statesment”。 (见打印的支票)
我是编码新手,但这没有任何意义,我在 stackoverflow 上尝试了所有很棒的建议,但似乎没有一个有效 (所有插座都已连接等)
我将发布两种变体:ViewController 和 TableViewController(两者都应该获得相同的信息)
TableViewController:
import UIKit
import Parse
class HistoryTableViewController: UITableViewController {
var zeit = [String]()
var kosten = [String]()
var kilometer = [String]()
var datum = [String]()
override func viewDidLoad() {
super.viewDidLoad()
let query = PFQuery(className: "GemachteFahrten")
query.whereKey("gefahreneZeit", equalTo: (PFUser.current()?.objectId!)!)
query.whereKey("kosten", equalTo: (PFUser.current()?.objectId!)!)
query.whereKey("createdAt", equalTo: (PFUser.current()?.objectId!)!)
query.whereKey("gefahreneKilometer", equalTo: (PFUser.current()?.objectId!)!)
print("check1")
query.findObjectsInBackground { (objects, error) in
if error != nil {
print("error finding user data")
} else {
print("check2")
if let fahrtenRequests = objects {
self.zeit.removeAll()
self.datum.removeAll()
self.kosten.removeAll()
self.kilometer.removeAll()
print("check3")
for fahrtenRequest in fahrtenRequests {
print("check4")
self.zeit.append(fahrtenRequest["gefahreneZeit"] as! String!)
self.kosten.append(fahrtenRequest["kosten"] as! String)
self.datum.append(fahrtenRequest["createdAt"] as! String)
self.kilometer.append(fahrtenRequest["gefahreneKilometer"] as! String)
self.tableView.reloadData()
print("check5")
}
print("check6")
}
}
}
self.tableView.reloadData()
}
override func viewDidAppear(_ animated: Bool) {
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return datum.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellHistory", for: indexPath) as! CellHistoryViewControllerTableViewCell
cell.durationCell.text = zeit[indexPath.row]
cell.costCell.text = kosten[indexPath.row]
cell.routeCell.text = kilometer[indexPath.row]
cell.dateCell.text = datum[indexPath.row]
return cell
}
在控制台中它会打印: So it seems the for-statement is not read
看来这就是问题所在?还是我在其他地方做错了什么?:
print("check3")
for fahrtenRequest in fahrtenRequests {
print("check4")
self.zeit.append(fahrtenRequest["gefahreneZeit"] as! String!)
self.kosten.append(fahrtenRequest["kosten"] as! String)
self.datum.append(fahrtenRequest["createdAt"] as! String)
self.kilometer.append(fahrtenRequest["gefahreneKilometer"] as! String)
self.tableView.reloadData()
print("check5")
}
print("check6")
这也是 ViewController 的另一个变体并添加了 TableView:
import UIKit
import Parse
class HistoryViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var zeit = [String]()
var kosten = [String]()
var kilometer = [String]()
var datum = [String]()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
let query = PFQuery(className: "GemachteFahrten")
query.whereKey("gefahreneZeit", equalTo: (PFUser.current()?.objectId!)!)
query.whereKey("kosten", equalTo: (PFUser.current()?.objectId!)!)
query.whereKey("createdAt", equalTo: (PFUser.current()?.objectId!)!)
query.whereKey("gefahreneKilometer", equalTo: (PFUser.current()?.objectId!)!)
print("check1")
query.findObjectsInBackground { (objects, error) in
if error != nil {
print("error finding user data")
} else {
print("check2")
if let fahrtenRequests = objects {
self.zeit.removeAll()
self.datum.removeAll()
self.kosten.removeAll()
self.kilometer.removeAll()
print("check3")
for fahrtenRequest in fahrtenRequests {
print("check4")
self.zeit.append(fahrtenRequest["gefahreneZeit"] as! String!)
self.kosten.append(fahrtenRequest["kosten"] as! String)
self.datum.append(fahrtenRequest["createdAt"] as! String)
self.kilometer.append(fahrtenRequest["gefahreneKilometer"] as! String)
self.tableView.reloadData()
print("check5")
}
print("check6")
}
}
}
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return datum.count
}
internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CellHistoryViewControllerTableViewCell = tableView.dequeueReusableCell(withIdentifier: "CellHistory", for: indexPath) as! CellHistoryViewControllerTableViewCell
cell.durationCell.text = zeit[indexPath.row]
cell.costCell.text = kosten[indexPath.row]
cell.routeCell.text = kilometer[indexPath.row]
cell.dateCell.text = datum[indexPath.row]
return cell
}
还有自定义单元格代码:
import UIKit
class CellHistoryViewControllerTableViewCell: UITableViewCell {
@IBOutlet weak var dateCell: UILabel!
@IBOutlet weak var durationCell: UILabel!
@IBOutlet weak var costCell: UILabel!
@IBOutlet weak var routeCell: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
我真的希望有人认识到这个问题,如果您需要更多信息或屏幕截图,请告诉我 :)
再次感谢您的帮助和时间:)
【问题讨论】:
-
为什么要删除
check2和 if let 语句之后的所有对象?fahrtenrequest之后是空的,所以没有内容可以循环 -
我认为只有在有新对象要加载时,他才会删除所有旧对象...
-
我会在 print("check3") 之后使用 print("fahrtenRequests.count = (fahrtenRequests.count)") 打印出 fahrtenRequests 中的项目数,以进一步调查此问题。或者按照 Zeb 的建议更好地使用调试器。
-
顺便说一句,尝试使用带断点的调试器来看看到底发生了什么
-
我用 -fahrtenrequests.count 进行了尝试,它等于 0(也在删除删除部分之后;)),打印对象时我得到一个空数组..soo 一定有问题从 Parse 中获取我的字符串...我尝试了多种组合,但没有任何效果 :( 并且所有信息都在 parse 中进行了三次检查!.. 也许你在代码中看到了一些令人担忧的东西?@slashburn
标签: ios arrays swift uitableview tableviewcell