Это мой первый опыт работы с облачной базой данных, и я ищу здесь небольшое руководство, поскольку я относительно новичок в программировании и, в частности, в Firestore.
Я пытаюсь get()
все данные моего документа внутри моего viewDidLoad
и сохраните его внутри словаря, чтобы я мог использовать его позже в методах tableView dataSource
для заполнения моих tableView
разделов и строк.
Я работаю над приложением для журнала тренировок / тренировок и ввел некоторые фиктивные данные для коллекций дней и тренировок, поэтому мой словарь распечатывается следующим образом ...
dataDict = ["Monday": ["Chest", "Arms"], "Wednsday": ["Legs", "Arms"], "Tuesday": ["Back"]]
Но я У меня проблемы с использованием этих данных для заполнения полей, потому что если я пытаюсь распечатать результаты dataDict
вне функции dateWorkoutRequest
, как внутри моих методов dataSource
, я получу пустой словарь. Мой tableView.reloadData()
не в том месте? Должен ли я использовать словарь для анализа моих данных или это плохая идея?
Вот моя структура данных и соответствующий код ...
/users/mi9P3TrLwkQejYo3oDIu/Days/WZ3Q6LDuu1kja5Rc/Workouts/BpLGFREoJNzNQW
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()
}
}
}