# #json #swift #firebase #firebase-realtime-database
Вопрос:
У меня есть следующий быстрый код для извлечения данных из базы данных Firebase в реальном времени:
private let db = Database.database().reference(withPath: "food")
func fetchFoods() {
db.getData(completion: { error, snapshot in
guard error == nil else {
print("ERROR")
print(error!.localizedDescription)
return
}
print(snapshot.value as? String ?? "Unknown")
// Food data is stored as a map of UUIDs to Food objects
guard let foodDicts = snapshot.value as? [String: Any] else {
print("ERROR: type cast failed")
return
}
})
}
Но у меня возникла странная проблема, где, если мои данные хранятся как таковые:
{
"food": [{
"id": "8466A419-AE6E-4997-BE74-220B59C95F96",
"cholestrol": 0,
"macroProfile": {
"carbProfile": {
"sugar": 0,
"fiber": 0
},
...
}]
}
Нет никаких проблем с получением данных. Однако, если данные хранятся как таковые:
{
"food": {
"8466A419-AE6E-4997-BE74-220B59C95F96": {
"cholestrol": 0,
"macroProfile": {
"carbProfile": {
"sugar": 0,
"fiber": 0
},
...
}
}
}
Я получаю:
Unable to get latest value for query FQuerySpec (path: /, params: {
}), client offline with no active listeners and no matching disk cache entries
Комментарии:
1. Покажите дерево набора данных в виде изображения.
Ответ №1:
Я исправил это, отредактировав database.rules.json
и установив для правил чтения и записи значение true.
{
"rules": {
".read": true,
".write": true
}
}
Теперь, вы можете спросить, почему работал другой формат данных? Потому что он был сохранен в кэше с прошлого раза!! И где-то по пути мой файл правил изменился.