Мне нужно получить значения ключей из моей базы данных в Firebase и добавить в массив.Это мой запрос:
let dbHandle = Database.database().reference().child("userRecords").child(uid).queryOrdered(byChild: self.startDate).queryEnding(atValue: self.finishDate)
dbHandle.observeSingleEvent(of: .value, with: { (snapshot) in
guard let foundRecords = snapshot.children.allObjects as? [DataSnapshot] else {return}
for record in foundRecords{
let recordName = record.childSnapshot(forPath: "recordName").value as! String
let recordTime = record.childSnapshot(forPath: "timestamp").value as! String
let recordRate = record.childSnapshot(forPath: "recordRate").value as! String
self.records.append(["equipment": recordName as AnyObject,"date": recordTime as AnyObject, "rate": recordRate as AnyObject])
}
Это моя структура базы данных:
Snap (record1) {
"-LUmY5jC-jC6vwpQj26S" = {
recordName = "record1";
recordRate = "1.2";
timestamp = "27/12/2018 at 01:59";
};
"-LUmaAcxLcz1Oif4-L8n" = {
recordName = "record1";
recordRate = "1.0";
timestamp = "25/12/2018 at 02:15";
};}
JSON:
{"userRecords" : {
"l1GIK43GCUbdnnyYsrQnO3JLnjV2" : {
"record1" : {
"-LUmY5jC-jC6vwpQj26S" : {
"recordName" : "record1",
"recordRate" : "1.2",
"timestamp" : "27/12/2018 at 01:59"
},
"-LUmaAcxLcz1Oif4-L8n" : {
"recordName" : "record1",
"recordRate" : "1.0",
"timestamp" : "25/12/2018 at 02:15"
}
},
"record2" : {
"-LUmY7GRwo6_Iq6IqbN_" : {
"recordName" : "record2",
"recordRate" : "1.1",
"timestamp" : "27/12/2018 at 01:59"
},
"-LUmaAcr1P2mQrtSdFWi" : {
"recordName" : "record2",
"recordRate" : "1.2",
"timestamp" : "25/12/2018 at 02:15"
}
}
}
},}
запрос выдает "Поток 1: сигнал SIGABRT".Все объекты правильно подключены.Когда я изменяю запрос на:
dbHandle.observeSingleEvent(of: .childAdded, with: { (snapshot) in
Запрос работает нормально.
Результаты добавляются в мой массив "records" и затем сохраняются в словаре обратно в Firebase:
let reportsRef = Database.database().reference().child("reports").child(uid)
let reportDict = ["reportNumber": reportNumber, "company": self.companyTxtField.text!, "address": self.addressTxtField.text!, "start": self.startDate, "finish": self.finishDate, "records": self.records] as [String : Any]
reportsRef.childByAutoId().setValue(reportDict)
Проблемы:
- Я получаю значениядобавляется в мой массив только из "record1", хотя есть также и "record2", по крайней мере.Как я могу получить все значения из всех объектов в "foundRecords" и добавить значения в массив
records: [[String: AnyObject]]
? - Почему "наблюдающий единый случай (из: .value" выдает ошибку?
* значения меток времени не были преобразованы в формат NSDate для демонстрационных целей