我在View Controller A上的viewWillAppear
上观察到了一个查询
let query = FIRDatabase.database().reference().child("tags").
queryOrdered(byChild: "users/uid").queryEqual(toValue: userId)
在同一个视图控制器中,viewDidDisappear
我删除了这个观察者。
所以,让我说我从View Controller A推入另一个视图控制器。
当我回到View Controller A时,观察者返回一个快照,即使我后端的数据没有改变。
如果对我的数据库进行了一些实际更改,我只想要快照返回。我该如何解决这个问题?感谢。
答案 0 :(得分:1)
一个答案是让观察者完成工作并在后台更新您的数据。
因此,如果用户在controllerA上,则观察者更新数据源(数组),然后从该数组更新UI。
当用户切换到controllerB时,观察者仍然可以更新阵列,但不要更新控制器A中的UI,因为没有必要。
当用户切换回A时,您将获得当前数据,因此只需从数组中重新加载tableView(假设iOS)。
此解决方案减少了“轮询”。大自然,让Firebase在需要时通知您的应用程序。当控制器变为活动状态时,您只是从数组重新加载tableViews。
修改
这里的想法是添加观察者一次 - 也许当视图仅加载第一次(viewDidLoad)或者可能在你的app委托中。添加观察者后,它将在数据更改时更新dataSource数组,因此当您从视图移动到视图时,所需的唯一操作是从更新的数组重新加载tableView。
有些时候你可能想要删除一个观察者,但听起来并不像你需要从你的问题那样做。所以 - 连接观察者一次,让他们在数据发生变化时更新dataSource数组。切换视图时重新加载tableView。
答案 1 :(得分:0)