我正在尝试为每个用户更改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)
})
}
}