Firebase не удается сохранить данные в базу данных иногда? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть код, который сохраняет несколько вещей в базу данных (удостоверение личности с фотографией, идентификатор пользователя, имя пользователя, ключ)

проблема в том, что когда я нажимаю кнопку, чтобы сохранить эти данные, Firebase иногда не может сохранить их все (иногда не удается сохранить идентификатор фотографии, имя пользователя, ключ или несколько вещей одновременно)

иногда это удается и сохраняет их все в базе данных

в чем проблема и как я могу это исправить?

ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester").child(user!.uid).child("isRequesterAccepted").setValue(false)
                ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester")
                .child(user!.uid).child("name").setValue(name)
                ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester")
                .child(user!.uid).child("key").setValue(String(user!.uid))
                ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester")
                .child(user!.uid).child("profile_picture").setValue(String(user!.uid))
                ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester")
                .child(user!.uid).child("eventKey").setValue(event?.key)

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Я не уверен, что это правильный ответ, но, возможно, он приведет вас к одному.

Несколько вещей:

Вы можете значительно упростить этот код до

let ref = rootRef.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester").child(user!.uid)
let data = [
    "isRequesterAccepted": false,
    "key": String(user!.uid),
    "profile_picture": String(user!.uid),
    "eventKey": event?.key
]
ref.setValue(data)

также, как уже упоминалось, вы небезопасно распаковываете опциональные файлы, поэтому возможно, что данные неверны или не соответствуют ожидаемым.

Это, например, опасно

(event?.userID)!

, поскольку событие может быть равно нулю, что приведет к сбою приложения.

Кроме того, это может быть проблемой, и вы заявляете здесь, что событие, наверняка, не ноль.

event!.key

Я также отметил, что вы храните одно и то же значение в двух узлах - это может быть проблемой

.child("key").setValue(String(user!.uid))
.child("profile_picture").setValue(String(user!.uid))
0 голосов
/ 16 апреля 2019

Я не уверен на 100%, но возможная причина заключается в использовании принудительной развертки в вашем коде.

Так что попробуйте немного переработанный:

guard let indeedEvent = event,
  let indeedUser = user else {
  return
}

ref.child("requests")
  .child("receiver")
  .child(indeedEvent.userID)
  .child("event")
  .child(indeedEvent.key)
  .child("requester")
  .child(indeedUser.uid)
  .child("isRequesterAccepted")
  .setValue(false)

ref.child("requests")
  .child("receiver")
  .child(indeedEvent.userID)
  .child("event")
  .child(indeedEvent.key)
  .child("requester")
  .child(indeedUser.uid)
  .child("name")
  .setValue(name)

ref.child("requests")
  .child("receiver")
  .child(indeedEvent.userID)
  .child("event")
  .child(indeedEvent.key)
  .child("requester")
  .child(indeedUser.uid)
  .child("key")
  .setValue(String(indeedUser.uid))

ref.child("requests")
  .child("receiver")
  .child(indeedEvent.userID)
  .child("event")
  .child(indeedEvent.key)
  .child("requester")
  .child(indeedUser.uid)
  .child("profile_picture")
  .setValue(String(indeedUser.uid))

ref.child("requests")
  .child("receiver")
  .child(indeedEvent.userID)
  .child("event")
  .child(indeedEvent.key)
  .child("requester")
  .child(indeedUser.uid)
  .child("eventKey")
  .setValue(indeedEvent.key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...