在iOS中使用Firebase / Firestore填充tableView时遇到麻烦
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在iOS中使用Firebase / Firestore填充tableView时遇到麻烦相关的知识,希望对你有一定的参考价值。
我已经坚持了几天,但我不确定如何继续。这是我第一次使用云数据库,在这里我需要一些指导,因为我对编程(尤其是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()
以上是关于在iOS中使用Firebase / Firestore填充tableView时遇到麻烦的主要内容,如果未能解决你的问题,请参考以下文章
相同的 Flutter Web 构建使用 `dhttp` 在本地运行,但使用 `firebase serve` 或 `firebase deploy` 失败
vue-cli v3 与 node.js firebase 函数,firebase 托管(错误:在函数源目录中找不到 npm 包)