gpt4 book ai didi

ios - 如何从字典中检索Firestore数据并填充Tableview行/节?

转载 作者:行者123 更新时间:2023-12-01 16:01:13 25 4
gpt4 key购买 nike

我正在尝试使用已解析并存储在字典中的Firestore数据填充tableview的Sections and Rows,看起来像这样...

dataDict = ["Monday": ["Chest", "Arms"], "Wednsday": ["Legs", "Arms"], "Tuesday": ["Back"]]

坦率地说,我什至不确定我是否应该像以前那样将数据存储在字典中。这样做是错误的吗?另外,由于数据是异步提取的,那么仅在字典中完全加载了网络数据后,如何才能填充节和行?我正在使用完成处理程序,但是当我尝试打印 dataDict的结果时,它会依次打印出三个数组,就像这样……
["Monday": ["Chest", "Arms"]]
["Tuesday": ["Back"], "Monday": ["Chest", "Arms"]]
["Tuesday": ["Back"], "Monday": ["Chest", "Arms"], "Wednsday": ["Legs", "Arms"]]

而我希望它在完成后返回数组的单个打印。我究竟做错了什么?

enter image description here
enter image description here
var dataDict : [String:[String]] = [:]


//MARK: - viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()

vcBackgroundImg()
navConAcc()

picker.delegate = self
picker.dataSource = self

tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellID)
tableView.tableFooterView = UIView()

Auth.auth().addStateDidChangeListener { (auth, user) in
self.userIdRef = user!.uid
self.colRef = Firestore.firestore().collection("/users/\(self.userIdRef)/Days")

self.loadData { (done) in
if done {
print(self.dataDict)
} else {
print("Error retrieving data")
}
}

}

}

//MARK: - Load Data
func loadData(completion: @escaping (Bool) -> ()){
self.colRef.getDocuments { (snapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
completion(false)
}
else {
//Appending all Days collection documents with a field of "dow" to daysarray...
for dayDocument in snapshot!.documents {
self.daysArray.append(dayDocument.data()["dow"] as? String ?? "")
self.dayIdArray.append(dayDocument.documentID)


Firestore.firestore().collection("/users/\(self.userIdRef)/Days/\(dayDocument.documentID)/Workouts/").getDocuments { (snapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
completion(false)
}
else {
//Assigning all Workouts collection documents belonging to selected \(dayDocument.documentID) to dictionary dataDict...
for document in snapshot!.documents {

if self.dataDict[dayDocument.data()["dow"] as? String ?? ""] == nil {
self.dataDict[dayDocument.data()["dow"] as? String ?? ""] = [document.data()["workout"] as? String ?? ""]
} else {
self.dataDict[dayDocument.data()["dow"] as? String ?? ""]?.append(document.data()["workout"] as? String ?? "")
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
// print(self.dataDict)
}
completion(true)
}
}
}
self.dayCount = snapshot?.count ?? 0
}
}
}

最佳答案

我认为这只是程序的流程。每次循环遍历该集合时,都会将其添加到字典中。因此,在第一遍中,它将打印字典中有一项。在第二遍中,它将另一个项添加到字典中,然后打印字典,该字典中现在有2个项,因此将打印2个项。我不认为您看到了意外的行为,这只是您的日志语句如何与循环方式一起排序。

换句话说,这样打印是有意义的。

关于ios - 如何从字典中检索Firestore数据并填充Tableview行/节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61492699/

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