我已经坚持了几天,但我不确定如何继续。这是我第一次使用云数据库,在这里我需要一些指导,因为我对编程(尤其是Firestore)还比较陌生。
基本上,我试图将我的所有文档数据都存储在get()
中,并将其存储在字典中,以便以后可以在viewDidLoad
方法中使用它来填充tableView dataSource
节和行。
我正在健身房/锻炼日志应用程序上工作,并且为“天数和锻炼集合”输入了一些虚拟数据,因此我的字典像这样打印出来...
tableView
但是我在使用此数据填充字段时遇到了麻烦,因为如果我尝试在dateWorkoutRequest函数外部(例如在dataSource方法内部)打印出dataDict的结果,则会得到一个空字典。我的dataDict = ["Monday": ["Chest", "Arms"], "Wednsday": ["Legs", "Arms"], "Tuesday": ["Back"]]
放在错误的位置了吗?我应该使用字典来解析我的数据还是一个坏主意?
感谢您能提供的任何帮助。在此先感谢!
这是我的数据结构和相关代码...
tableView.reloadData()
/users/mi9P3TrLwkQejYo3oDIu/Days/WZ3Q6LDuu1kja5Rc/Workouts/BpLGFREoJNzNQW
我会尝试将self.tableView.reloadData()放在将文档附加到数组中的行之后。
[我认为将DispatchQueue.main.async块也放入reloadData中也很有趣。
喜欢这个:
var daysArray = [String]()
var dayIdArray = [String]()
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.dateWorkoutRequest()
}
}
func dateWorkoutRequest(){
self.colRef.getDocuments { (snapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
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)");
}
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 ?? "")
}
print(self.dataDict)
}
}
}
}
self.dayCount = snapshot?.count ?? 0
self.tableView.reloadData()
}
}
}