【发布时间】:2017-04-04 18:52:10
【问题描述】:
我的应用中有两个视图控制器:第一个 显示 从 Firebase 数据库中提取的项目,第二个允许用户从数据库中添加和删除项目 .
问题是当用户在第二个视图控制器中添加一个项目并很快返回到第一个控制器时。这有时会导致 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 的代码吗?
-
Firebase 是异步工作的,所以不要在 viewWillAppear 中调用数据,而是在 viewController2 中使用一个委托来为 viewController1 的 tableView 重新加载数据。
标签: ios swift firebase firebase-realtime-database