Цель читается в темах из узла Attendance и заполняет источник данных, который поддерживает pickerView.
Я собираюсь дать полный ответ, поскольку он решит несколько проблем с кодом в вопросе.
Первое, на что нужно обратить внимание: после заполнения массива dataSource строками, которые отображаются в pickerView, что делать, если пользователь нажимает один, чтобы выбрать его?Как вы знаете, что это за тема?Что если две темы имеют одно и то же имя, но разные даты.
Вот как это решить:
Сначала мы начнем с LectureClass, в котором хранится ключ (идентификатор) лекции, а такжетема, дата и т. д. и т. д.
class LectureClass {
var key = ""
var topic = ""
var date = ""
init(withSnapshot: DataSnapshot) {
self.key = withSnapshot.key
self.topic = withSnapshot.childSnapshot(forPath: "topic").value as? String ?? "No Topic"
self.date = withSnapshot.childSnapshot(forPath: "date").value as? String ?? "No Date"
}
}
, затем массив dataSource для хранения всех тем
var lectureArray = [LectureClass]()
, затем код для чтения во всех темах, итерации по каждой теме и созданиеLectureClass из данных, хранящихся в каждом снимке.
func readLectures() {
print(#function)
let ref = self.ref.child("Attendance")
ref.observeSingleEvent(of: .value, with: { snapshot in
let allLectures = snapshot.children.allObjects as! [DataSnapshot]
for lectureSnap in allLectures {
let aLecture = LectureClass(withSnapshot: lectureSnap)
self.lectureArray.append(aLecture)
}
})
//reload your collection view here
}
после запуска этого кода источник данных будет содержать данные из Firebase и отображаться в collectionView.
Итак, когда пользователь нажимаетстрока, вы будете знать, какая строка и какая соответствует строке в источнике данных.Оттуда вы можете получить класс LectureClass и ключ к определенному узлу.
Как только еще одно важное замечание, вы должны изменить свою структуру.Теперь у вас есть
{
"Attendance" : {
"24-9-2019%20AAB%20OS%2010:35am" : {
, и с этим ключом будет очень сложно работать.Вам следует создать ключи Firebase с помощью .childByAutoId, а затем сделать строку "24-9-2019% 20AAB% 20OS% 2010: 35am" в качестве дочернего узла
{
"Attendance" : {
"lecture_0": //created with .childByAutoId
topic: "Memory Management"
date: "2019-09-24"
whatever_this_is: "24-9-2019%20AAB%20OS%2010:35am"
"lecture_1": {
также, пожалуйста, сохраняйте даты в сортируемомформат.Это не будет сортировать должным образом, если вам когда-либо понадобится сортировка
"Date" : "27-9-2019",
, сделайте это вместо
"date" : "2019-09-27"