Swiftui Firebase RTDB 不会在视图中更新

Posted

技术标签:

【中文标题】Swiftui Firebase RTDB 不会在视图中更新【英文标题】:Swiftui Firebase RTDB doesnt update in view 【发布时间】:2021-09-29 13:56:51 【问题描述】:

我目前正在尝试在消息传递应用程序中实现阅读功能,到目前为止一切似乎都进展顺利...

当用户打开他未读的聊天时,数据库中的值会发生变化,但是当他返回导航视图时,仍然显示该消息未读。这种情况一直持续到应用重新启动,然后数据似乎已同步。

更新数据库的代码:

    func markRead(messageKey : String)

    let read = "true"
    let ref = self.ref.child("messages").child(messageKey)
    ref.updateChildValues(["read":read])
    

聊天是通过 NavigationView 导航的,也许有某种技巧可以在点击后退按钮后刷新视图?我试过用这个:

self.session.objectWillChange.send()

但是用户仍然需要在底部导航中选择一个不同的选项卡,然后返回,仍然不会更新应用程序中的读取状态...

有什么建议或解决方案吗?提前致谢!

【问题讨论】:

您没有显示任何与您的视图相关的代码。显示ObservableObject 和存储它的视图——否则,这是不可能调试的。 【参考方案1】:

您的视图是否包含一些 tableView 来显示未读消息? 如果是,那么您需要使用方法tableView.reloadData() 在您返回导航视图后使用新信息更新 tableView。 我会把这个方法放在viewDidAppear()

我有一个项目,我的 tableView 必须更新取决于用户是否登录/退出。它看起来与您的情况相似,用户确实在 viewController2 中登录,然后返回到 viewController1。因此,我将tableView.reloadData() 放入viewDidAppear() 中以获得viewController1,结果符合预期。

希望对你有帮助。

【讨论】:

你看到那边的swiftui标签了吗?你怎么知道他或她正在使用 UKit?

以上是关于Swiftui Firebase RTDB 不会在视图中更新的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:rtdb.initStandalone 不是函数

本地写入带有附加侦听器的 Firebase RTDB 或 Firestore 是不是需要读取操作?

Firebase 引用对象不会保存到 SwiftUI 中的变量

删除 SwiftUI 后 Firebase Firestore 不更新 UI

Firebase Crashlytics 不会激活

防止滥用:Firebase 的云功能