ios - swift | TableView 为空/空白(使用自定义单元格)

标签 ios arrays swift uitableview

我的 TableView 是空的/只显示空白单元格(屏幕截图) 我尝试使用 TableViewController 和带有 TableView 的 ViewController - 两者都显示相同的结果。 enter image description here

因此,我尝试确定问题的具体位置,但似乎没有读取“for 语句”。 (查看打印的支票)

我是编码新手,但这没有任何意义,我已经尝试了 stackoverflow 上的所有很棒的建议,但似乎都不起作用 (所有 socket 均已连接等)

我将发布这两种变体: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
 }
}

我真的希望有人认识到这个问题,如果您需要更多信息或屏幕截图,请告诉我:)

再次感谢您的帮助和时间:)

最佳答案

您没有将 TableView 委托(delegate)设置为 self,这就是它发生的原因。 在ViewController中添加TableView:

  1. 在 viewDidLoad 中设置 self.tableView.delegate = self。
  2. 将您的客户单元格注册到表格 View ,例如 viewDidLoad 中的 tableView.registerNib(UINib(nibName: "nameOfTheNib", bundle: nil), forCellReuseIdentifier: "reuseIdentifier")
  3. cellForRowAtIndexPath中使用“reuseIdentifier”创建该单元格
  4. 它会起作用

关于ios - swift | TableView 为空/空白(使用自定义单元格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40057444/

相关文章:

c - 为什么我的 Postgres VarBit(C 语言函数)中的某些位针对特定输入被归零?

core-data - 向实体添加属性后,快速核心数据崩溃

ios - 为什么从 Project 中的 Organizer 崩溃不会将我带到崩溃的地方?

iphone - 从文本文件中读取 NSPoint

ios - 使用 GPUImage 和 GPUImageHoughTransformLineDetector 检测突出显示的文本边界框

iphone - 如何以编程方式设置导航栏的位置

javascript - 使用 JavaScript 创建日期和分钟数组

java - Java中使用字符串数组时出现空指针异常

ios - 是否可以将 CKRecord.encodeSystemFields 与 JSONEncoder 一起使用

ios - userNotificationCenter didReceive 响应包含空通知(watchOS)