我当时正在开发一个杂货 list 应用程序。当我尝试使用 Firebase 将数据同步到 TableView 时,杂货项目无法显示在 TableView 上。但是,当我重置模拟器时,之前添加的项目可以显示在表格 View 中,但是当我添加另一个项目时,它不能显示在表格 View 中。我仔细检查了代码,没有发现任何错误。你能帮我解决一下吗?(例如,在下面的两个图像中,咖啡项目无法显示)
GroceryListViewController.swift中的部分代码
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
//Attach a listener to receive updates.
ref.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
var newItems = [GroceryItem]()
for item in snapshot.children
{
let groceryItem = GroceryItem(snapshot: item as! FDataSnapshot)
newItems.append(groceryItem)
}
self.items = newItems
self.tableView.reloadData()
})
}
最佳答案
1 - 您正在使用 observeSingleEventOfType(* 这等同于 observeEventType:withBlock:,除了在返回初始数据后立即取消 block 。)来自文档。因此,您的听众被调用一次并停止收听。改为使用 observeEventType
2 - 您应该像这样在主线程上执行 tableview 的 reloadData 操作:
NSOperationQueue.mainQueue().addOperationWithBlock({
self.tableView.reloadData()
})
原因是您不能/不得从后台线程与 UI 交互。由于 Firebase 是异步的,因此完成 block 在后台线程上
关于ios - Swift:无法使用 Firebase 将数据同步到 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37300508/