新用户登录时评分系统未更新的Firebase实时数据库值

时间:2019-01-16 19:23:12

标签: swift firebase-realtime-database closures updating points

我正在尝试为每个用户更改Firebase数据库中的值(例如“损失”,“获胜”,“总积分”),并且确实会在用户登录时更新。但是,一旦另一个用户登录并赢得了赌注,分配给已登录的特定用户的点已成功添加到数据库中(显示子值的延续),但是丢失用户的值将“重置”为0,因此仅显示最近输的最大赔率。

我不确定我应该在哪里初始化profile2,我认为将其放入viewDidLoad是错误的,但是我不确定除了VC加载时还是每次输掉/赢了赌注之后还要检查profile2。

还有一些与此相关的代码可以工作,但是有点长。基本上,我认为新用户登录后,用户参数为“”,因为尚未运行设置用户默认值的其他代码,因此服务函数仅返回任何内容。有没有办法在viewDidLoad之外调用服务函数并检索更新的profile2?

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)
        })
    }
}

0 个答案:

没有答案