Я использую базу данных Firebase в реальном времени в проекте iOS. Происходит то, что я не могу объяснить. У меня есть таблица пользователей с пользователями, каждый пользователь имеет много разных полей и выглядит примерно так:
{
"first_name": "User First Name",
"last_name": "User Last Name",
"age": 10
}
Но я вижу странное поведение, которое не могу объяснить. Когда я подписываюсь, чтобы наблюдать объект или наблюдатьSingleEvent, используя тип события .value
, я получаю только first_name
, а не полный объект. Если я иду к консоли Firebase и вручную изменяю last_name
, я получаю first_name
и last_name
, но снова я не получаю полный объект.
Я не знаю, что еще попробовать ... Я начинаю думать, что это ошибка кеша в Firebase iOS.
Моя конфигурация выглядит так:
let database = Database.database()
database.isPersistenceEnabled = true
let path = "/users/uuid"
let reference = Database.database().reference().child(path)
reference.keepSynced(true)
refHandle = reference.observe(.value, with: { (snapshot) in
let postDict = snapshot.value
})
Любая подсказка?!
UPDATE:
Я создал другое приложение, которое подключается к той же базе данных и извлекает объект при сбое в исходном приложении, и я правильно получаю объект.
Отвечая на комментарий Джея:
- Я не получаю полный объект, даже если я вижу полный объект в веб-консоли.
- Я, конечно, делаю
let postDict = snapshot.value as? [String: Any] ?? []
- Также я добавил для отладки
snapshot.childrenCount
, и он не возвращает все ключи от объекта. Я получаю только 1, то есть first_name
- В маршрут добавлено наблюдение:
/users/uuid/age
и оно пустое. .exists()
возвращает false
.
- Также проверил, правильно ли я
removeObserver
, когда я выскакиваю контроллер вида, который делает наблюдение, и он правильно удален.