最近增加值我在我的应用的两个视图控制器:第一个显示项目从火力地堡数据库中抽取,而第二个让用户添加和删除数据库中的项目。无法检索与火力地堡
问题是当用户在第二个视图控制器中添加一个项目并且非常快地返回到第一个控制器时。这有时会导致Firebase数据库不保存该项目。因此,第一个视图控制器将不会显示新添加的项目。
就植入而言,我获取viewWillAppear
中的项目,然后移除viewDidDisappear
中的Firebase侦听器观察者。我怎样才能解决这个问题?
// first view controller code
var items = [Item]()
var ref: FIRDatabaseReference!
func fetchItems() {
ref.child("items").observeSingleEvent(of: .value, with: { (snapshot) in
self.items = []
for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
if let dictionary = child.value as? [String: AnyObject] {
// Create item and append it to an items array
}
}
self.tableView.reloadData()
})
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.fetchItems()
}
override func viewDidDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
ref.removeAllObservers()
}
可以显示View Controller 2的代码吗? – dstepan
Firebase异步工作,因此不要在viewWillAppear中调用数据,而是在viewController1的tableView中使用viewController2中的委托来重新加载数据。 –