gpt4 book ai didi

ios - 如何从包含字典的数组中检索和显示 TableView 中的数据?

转载 作者:行者123 更新时间:2023-11-28 13:32:42 24 4
gpt4 key购买 nike

我正在尝试从 Firebase 检索数据并将其显示在表格 View 中。问题是这些值没有显示在 TableView 中。截至目前,我正在遍历我在 firebase 中的数据并将每个字典存储在一个数组中。然后使用该字典数组,我尝试在 TableView 单元格中设置一个标签,使其等于字典中的一个值。

这是我的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let arrayWithFirbaseInfo : Array<Dictionary<String, Any>> = findCordinateFolder()
print(arrayWithFirbaseInfo)

let cell = tableView.dequeueReusableCell(withIdentifier: "customTableCell", for: indexPath) as! NearbyTableViewCell

cell.distanceLabel.text = arrayWithFirbaseInfo.filter({$0["favorite drink"] != nil}).map({$0["favorite drink"]!}) as? String

return cell
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}



func findCordinateFolder() -> Array<Dictionary<String, Any>>{
var firebaseArray = Array<Dictionary<String, Any>>()

ref = Database.database().reference()

var currentLocation: CLLocation!
currentLocation = locManager.location

GeocodeFunction().geocode(latitude: currentLocation.coordinate.latitude, longitude: currentLocation.coordinate.longitude, completion: { placemark, error in
if let error = error as? CLError {
print("CLError:", error)
return
} else if let placemark = placemark?.first {
// you should always update your UI in the main thread
DispatchQueue.main.async {
// update UI here

// let city = placemark.locality ?? "unknown"

let state = placemark.administrativeArea ?? "unknown"

let storageRef = self.ref.child("drinkingFountains").child(state)
storageRef.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children.allObjects as! [DataSnapshot] {
var dict = child.value as? [String : Any] ?? [:]
let coordinateDistanceFrom = CLLocation(latitude: dict["lat"] as! Double, longitude: dict["long"] as! Double)
let distanceInMeters = currentLocation.distance(from: coordinateDistanceFrom)
dict["distanceFromCurrentLocation"] = String(distanceInMeters)

firebaseArray.append(dict)


}

})
}
}
})
return firebaseArray
}

最佳答案

如下更新索引路径处行的单元格中的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let arrayWithFirbaseInfo : Array<Dictionary<String, Any>> = findCordinateFolder()
print(arrayWithFirbaseInfo)

let cell = tableView.dequeueReusableCell(withIdentifier: "customTableCell", for: indexPath) as! NearbyTableViewCell
let isIndexValid = arrayWithFirbaseInfo.indices.contains(indexPath.row)
if isIndexValid {
cell.distanceLabel.text = arrayWithFirbaseInfo[indexPath.row]["favorite drink"] as? String
}
return cell
}

尝试将 arrayWithFirbaseInfo 移动到 viewdidload,而不是在行方法的单元格内声明它。您还应该使用 array.count 修改行数函数为

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

关于ios - 如何从包含字典的数组中检索和显示 TableView 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57118633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com