TableViewController 不更新单元格

2024-04-04

该应用程序允许乘客请求乘车,并且司机可以接受请求。在此表格视图中是乘客 (2) 请求的游乐设施。

无法更新表格视图单元格。

import UIKit
import Firebase
import FirebaseDatabase
import FirebaseAuth
import FirebaseCore
import CoreLocation

class RequestsTVC: UITableViewController {

var geoCoder : CLGeocoder?

var rideRequests = [FIRDataSnapshot]()
let ref = FIRDatabase.database().reference() //(withPath: "RideRequests")

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

    self.geoCoder = CLGeocoder()

    self.navigationController?.isNavigationBarHidden = false

    /*
     .observe is called whenever anything changes in the Firebase -
     It's also called here in viewDidLoad().
     It's always listening.

     */

    ref.child("drivers").child("RideRequests").observe(FIRDataEventType.value, with: { snapshot in
        self.rideRequests.removeAll()
        for item in snapshot.children{
            self.rideRequests.append(item as! FIRDataSnapshot)
        }
        self.rideRequests.reverse()
        self.tableView.reloadData()
    })

    DispatchQueue.main.async (execute: { () -> Void in
        self.tableView.reloadData()
    })

} // func viewDidLoad()


override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)


}


// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {

    return 1
}


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return rideRequests.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "RequestsCell", for: indexPath)

    let usernameLabel = cell.contentView.viewWithTag(2) as! UILabel
    let locationLbl = cell.contentView.viewWithTag(1) as! UILabel
    let destinationLbl = cell.contentView.viewWithTag(3) as! UILabel

    let request = self.rideRequests[indexPath.row]

    let username = request.childSnapshot(forPath: "username")

    let destLatString = request.childSnapshot(forPath: "destLat").value
    let destLat = Double(destLatString as! String)

    let destLongString = request.childSnapshot(forPath: "destLong").value
    let destLong = Double(destLongString as! String)


    let usernameText = username.value as! String


    let location = RiderVC.instance.locationManager.location
    let destination = CLLocation(latitude: destLat!, longitude: destLong!)


    usernameLabel.text = usernameText

    locationLbl.text = "Waiting ..."
    destinationLbl.text = "Loading ... "

    // LOCATION and DESTINATION


    geoCoder?.reverseGeocodeLocation(location!, completionHandler: { (data, error) -> Void in
        guard let placeMarks = data as [CLPlacemark]! else {
            return
        }

        let loc: CLPlacemark = placeMarks[0]
        let addressDict : [NSString: NSObject] = loc.addressDictionary as! [NSString: NSObject]
        let addrList = addressDict["FormattedAddressLines"] as! [String]
        print(addrList)
        locationLbl.text = addrList[0]

        // THAT'S THE FIRST BIT DONE
        // THIS IS STILL INSIDE THE COMPELTION HANDLER

        // NOW DO DESTINATION
        // DESTINATION


        self.geoCoder?.reverseGeocodeLocation(destination, completionHandler: { (data, error) -> Void in

            guard let placeMarks = data as [CLPlacemark]! else {
                return
            }

            let loc: CLPlacemark = placeMarks[0]
            let addressDict : [NSString: NSObject] = loc.addressDictionary as! [NSString: NSObject]
            let addrList = addressDict["FormattedAddressLines"] as! [String]
            destinationLbl.text = addrList[0]
        })

    })

    return cell
}

**表格视图的屏幕截图在第一个单元格之后未更新**


确保在主队列中重新加载表视图with parameter closure.

ref.child("drivers").child("RideRequests").observe(FIRDataEventType.value, with: { snapshot in
    self.rideRequests.removeAll()
    for item in snapshot.children{
        self.rideRequests.append(item as! FIRDataSnapshot)
    }
    self.rideRequests.reverse()
    DispatchQueue.main.async (execute: { () -> Void in
        self.tableView.reloadData()
    })
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TableViewController 不更新单元格 的相关文章

随机推荐