Не уверен, стоит ли мне использовать базу данных в реальном времени - PullRequest
0 голосов
/ 03 апреля 2019

В настоящее время возникают проблемы с отображением всех рекордов из моей базы данных Firebase в реальном времени. На данный момент я показываю только «живые» результаты.

В настоящее время я делаю табло, где 50 лучших результатов и их имена отображаются в таблице. Это отлично работает. Однако я не уверен, стоит ли мне использовать базу данных в реальном времени.

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

Если я выйду из системы (но все еще в приложении) и зарегистрируюсь с новым пользователем, а затем снова сыграю (с новым пользователем), а затем я нажму, чтобы снова увидеть таблицу лидеров рекордов, теперь я могу видеть оба пользователей, которых я создал, с их оценками. ЗДОРОВО!

Я могу проверить часть аутентификации firebase, и, конечно же, мои пользователи там с их электронной почтой, паролями и т. Д. И я могу проверить их рекорды в базе данных в реальном времени. Все хорошо.

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

Следовательно, когда я нажимаю, чтобы увидеть список лидеров рекордов, мне нечего показать. Это потому, что мне не следует использовать базу данных в реальном времени, она отображает только «текущие / последние данные» и фактически не хранит данные, которые я хочу постоянно. Должен ли я использовать SQL или что-то еще?

Это код для добавления моего рекорда в мою базу данных ......

func addingScoreToFB() {

  let currentUser = Auth.auth().currentUser
  let highScore = UserDefaults.standard.integer(forKey: highScoreIdentifier)
  let recentScore = UserDefaults.standard.integer(forKey: recentScoreIdentifier)

  if let userID = currentUser?.uid {
  let userDB = Database.database().reference().child("Users").child(userID)
  if recentScore > highScore {
      let highSDictionary = ["highScore":self.recentScores.last!]
            userDB.updateChildValues(highSDictionary as Any as! [AnyHashable : Any], withCompletionBlock: { (err, ref) in // Adding Score

   if let err = err {
      print(err)
   }
   })
  }
 }
}

Это мой код для отображения результатов .....

func retrieveUserData() {

    let postsRef = self.ref.child("Users")
    let query = postsRef.queryOrdered(byChild: "highScore").queryLimited(toLast: 50)
    query.observeSingleEvent(of: .value, with: { snapshot in
        for child in snapshot.children {
           let snap = child as! DataSnapshot
           let dict = snap.value as! [String: Any]
           let name = dict["username"] as! String
           let score = dict["highScore"] as! Int
           let aScore = ScoreClass(withName: name, andScore: score)
           self.scoresArray.insert(aScore, at: 0)
        }
     self.topScoresTableView.reloadData()
    })
}

В целом, я хотел бы видеть 50 лучших результатов каждого пользователя в базе данных за все время, но в настоящее время я вижу только последние из них в новой сборке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...