Значения базы данных Firebase в реальном времени для системы скоринга не обновляются при входе нового пользователя - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь изменить значения в базе данных Firebase для каждого пользователя (например, «убытки», «выигрыши», «totalPoints»), и он обновляется, когда пользователь вошел в систему. Однако, как только другой пользователь входит в систему и выигрывает поспорим, что баллы, которые распределены конкретному пользователю, вошедшему в систему, успешно добавляются в базу данных (показывая продолжение дочерних значений), НО значения для пользователя, который потерял, «сбрасываются» до 0, поэтому он показывает только значения для самый последний результат проигрыша ставки.

Я не уверен, где мне следует инициализировать profile2, и я думаю, что неправильно помещать его в viewDidLoad, но я не уверен, где еще проверять profile2 не только при загрузке VC, но каждый раз, когда ставка была проиграна / выиграна.

Существует другой код, связанный с этим, который работает, но он немного длинный. По сути, я думаю, что после входа в систему нового пользователя аргумент пользователя «», потому что другой код, который устанавливает пользовательское значение по умолчанию, еще не был запущен, поэтому сервисная функция просто ничего не возвращает. Есть ли способ вызвать сервисную функцию за пределами viewDidLoad и получить обновленный профиль2?

class ViewBetsViewController: UIViewController {

@IBOutlet weak var tableView: UITableView!

...
var profile2: Profile?

override func viewDidLoad() {
    super.viewDidLoad()

...
    ProfileService.showOtherUser(user: UserDefaults.standard.string(forKey: "otherUsername") ?? "") { [weak self] (profile2) in
        self?.profile2 = profile2
    }
....

(сервисная функция)

static func showOtherUser(user: String?, completion: @escaping (Profile?) -> Void) {

    if user == "" {
        return
    }else{
        let profileRef = Database.database().reference().child("profile").child(user ?? "")

        profileRef.observe(.value, with: { (snapshot) in
            guard var profile2 = Profile(snapshot: snapshot) else {
                return completion(nil)
            }

            completion(profile2)
        })
    }
}
...