ios - Swift:无法使用 Firebase 将数据同步到 TableView

标签 ios swift uitableview asynchronous firebase

我当时正在开发一个杂货 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()
    })
}

Simulator Image Firebase Image

最佳答案

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/

相关文章:

ios - 重新排列 UICollectionView 的单元格

ios - UISwipeGestureRecognizer 应用于窗口

arrays - 如何对元组数组进行排序?

ios - 删除 UITableView 中的行需要太多时间

ios - 如何将 UITextView 放在 TableViewController 的底部?

ios - 使用 NSOperations 和 Coredata 在 iOS 应用程序中测试 API 请求层的建议

ios - UIDocumentInteractionController 支持横向和纵向

ios - 带有快速下载按钮的视频播放器

objective-c - UITableView 滚动后 UIButton 不可点击

ios - 如何根据在 UITextView 中输入的文本更新 UITableViewCell 高度