简体   繁体   English

Swift - ReloadData 不调用 CellForRowatIndexPath

[英]Swift - ReloadData doesn't call CellForRowatIndexPath

I'm kind of a swift noobie trying to load my JSON data from my server into my UITableView, but when I call the ReloadData method nothing seems to happen (while it should be calling CellForRowatIndexPath as far as I know).我是一个快速的菜鸟,试图将我的 JSON 数据从我的服务器加载到我的 UITableView 中,但是当我调用 ReloadData 方法时,似乎什么也没有发生(据我所知,它应该调用 CellForRowatIndexPath)。 I've tried some solutions that I found (like putting it in the main thread), but those didn't do the trick.我已经尝试了一些我发现的解决方案(比如把它放在主线程中),但那些都没有成功。 So I wonder if anyone could help me with this, because I don't know what to do.所以我想知道是否有人可以帮助我解决这个问题,因为我不知道该怎么做。

Thanks in advance.提前致谢。

This is my code:这是我的代码:

import UIKit
import Alamofire

private let reuseIdentifier = "PresenceCell"

class PresenceController: UITableViewController {

    @IBOutlet var presenceTableView: UITableView!
    var presenceList = [] as [Presence]

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addPresence))
        loadPresences(date: NSDate() as Date)


        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem()
    }

    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 {
        return 1
    }

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! PresenceCell
        let presence = presenceList[indexPath.row]
        cell.lblPresenceName.text = presence.name
        cell.lblPresenceTimes.text = presence.times
        if (presence.reasons.characters.contains("S")) {
            cell.lblPresenceSTD.isHidden = true
        } else {
            cell.lblPresenceSTD.isHidden = false
        }
        if (presence.reasons.characters.contains("M")) {
            cell.lblPresenceMDN.isHidden = true
        } else {
            cell.lblPresenceMDN.isHidden = false
        }
        if (presence.reasons.characters.contains("C")) {
            cell.lblPresenceEDH.isHidden = true
        } else {
            cell.lblPresenceEDH.isHidden = false
        }
        if (presence.reasons.characters.contains("L")) {
            cell.lblPresenceLEA.isHidden = true
        } else {
            cell.lblPresenceLEA.isHidden = false
        }
        if (presence.reasons.characters.contains("T")) {
            cell.lblPresenceTRD.isHidden = true
        } else {
            cell.lblPresenceTRD.isHidden = false
        }
        if (presence.event) {
            cell.swPresenceEvent.isOn = true
        } else {
            cell.swPresenceEvent.isOn = false
        }
        return cell
    }

    func addPresence(){
        performSegue(withIdentifier: "addPresenceSegue", sender: self)
    }

    private func loadPresences(date: Date) {
        let dateFormat = DateFormatter()
        dateFormat.dateFormat = "dd-MM-yyyy"
        let dateString = dateFormat.string(from: date)
        let url = "MyUrl" + dateString
        Alamofire.request(url, method: .get, encoding: URLEncoding.httpBody).responseJSON{ response in
            if let json = response.result.value {
                let dictionary = json as! [String:Any]
                let presences = dictionary["presences"] as! NSArray
                for index in 0..<presences.count {
                    let jsonPresence = presences[index] as! [String:Any]
                    let presence = Presence(id: jsonPresence["id"] as! Int, name: jsonPresence["name"] as! String, times: (jsonPresence["starttime"] as! String) + " - " + (jsonPresence["endtime"] as! String), reasons: jsonPresence["reasons"] as! String, event: ((jsonPresence["event"] as! Int) == 1))
                    //add your data into tables array from textField
                    self.presenceList.append(presence)
                }
                DispatchQueue.main.async{
                    self.tableView.reloadData()
                }
            }
        }
    }
}

It looks like your numberOfRowsInSection method isn't quite right.看起来您的 numberOfRowsInSection 方法不太正确。 Try this:尝试这个:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM