使用 Firebase 观察数据更新 UI (Swift)

Posted

技术标签:

【中文标题】使用 Firebase 观察数据更新 UI (Swift)【英文标题】:Update UI with Firebase Observe Data (Swift) 【发布时间】:2020-04-18 22:49:47 【问题描述】:

在观察 Firebase 节点时,我很难更新我的 Swift 应用程序的 UI。我有一个red_value、一个green_value 和一个blue_value 存储在firebase 中,它们被提取并用于构造一个UIColor,然后用于更新我的UI 上按钮的背景颜色。我成功地获取了颜色值,但是当我尝试从观察闭包中更新 UI 时,颜色总是变成白色,我不知道为什么。

我的代码可以在下面找到,以便更好地了解我在加载视图时要完成的工作:

override func viewDidLoad() 
        super.viewDidLoad()

        self.charitiesReference.child(charityUsername!).observe(.value) 
            snapshot in
            let values = snapshot.value as! [String: Any]

            let redValue = values["red_value"] as! CGFloat
            let greenValue = values["green_value"] as! CGFloat
            let blueValue = values["blue_value"] as! CGFloat
            let charityColor = UIColor(red: redValue, green: greenValue, blue: blueValue, alpha: 1.0)

            let ripplerFollowers = values["follower_ripplers"] as! [String: Bool]

            if ripplerFollowers["\(self.username!)"] ?? false 
                self.followOrFollowingButton.setTitle("Following", for: .normal)
                //ERROR -> The line below is producing a white background on my button 
                self.followOrFollowingButton.backgroundColor = charityColor
             else 
                self.followOrFollowingButton.setTitle("Follow", for: .normal)
                self.followOrFollowingButton.backgroundColor = .clear
            
        
    

更新: 当我将self.followOrFollowingButton.backgroundColor = charityColor 行更改为self.followOrFollowingButton.backgroundColor = UIColor(red: 0, green: 120, blue: 120, alpha: 1.0) 它按预期工作,这意味着 redValuegreenValueblueValue 变量正在发生某些事情

提前感谢您的帮助!

【问题讨论】:

可能是 UI(按钮)的更新必须在主线程上完成,而不是在另一个线程内完成。 尝试在主线程上运行 DispatchQueue,没有成功 【参考方案1】:

事实证明,我忘记将每个颜色值除以 255 以将它们置于 0.0 - 1.0 范围内。如果该值大于 1.0,则设置为 1.0,即为白色。

除以 255 后,它就像一个魅力

【讨论】:

以上是关于使用 Firebase 观察数据更新 UI (Swift)的主要内容,如果未能解决你的问题,请参考以下文章

Xcode UI 未使用最新的 Firebase 值更新

删除 SwiftUI 后 Firebase Firestore 不更新 UI

Firebase 数据库观察者的持久性如何?

可观察的集合没有在 UI 更改时更新

Firebase FCM React 项目问题 - firebase-messaging-sw.js 类型错误?

Firebase 数据结构建模以消除冗余更新或删除