ios - 如何监听 Firebase 任务完成?

标签 ios uitableview firebase firebase-realtime-database swift3

在此tutorial ,他们的 Firebase 代码分散在整个 Controller 中。由于您的 reload() 代码在现有的 .observe() 中,这使得在 Firebase 返回时重新加载 tableview 变得很容易。

ref.queryOrdered(byChild: "completed").observe(.value, with: { snapshot in
  var newItems: [GroceryItem] = []

  for item in snapshot.children {
    let groceryItem = GroceryItem(snapshot: item as! FIRDataSnapshot)
    newItems.append(groceryItem)
  }

  self.items = newItems
  self.tableView.reloadData()
})

如果 Firebase 代码在类中,如何处理上述问题?我仍然需要重新加载 tableview,但只有在 Firebase 返回之后。它看起来像这样:

f.performCompletedQuery()
self.tableView.reloadData()

f.performCompletedQuery() 将执行,但代码路径将继续,同时仍在从 Firebase 检索数据。 self.tableView.reloadData() 然后将触发并且表格将为空(因为 Firebase 尚未返回)。

我想我需要复制 Firebase 的观察,但将其暴露在类里面并从现有的观察中取回?好像有点绕。有没有更好的办法?也许只是 block 和显示和动画?

最佳答案

使用完成处理程序来实现这一点。 示例:

func queryOrdered(completion: (_ result: [Any]) -> ()) {
    // request here
    // getting response check on error
    // set completion for returned itmes if success
    completion([1, 2, 3])
}

// call the function
queryOrdered { [unowned self] (arr) in

    // get returned items
    self.myitems = arr
    // reload the table on main queue
    DispatchQueue.main.async {
        self.tableView.reloadData()
    }
}

关于ios - 如何监听 Firebase 任务完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39986699/

相关文章:

java - Firebase数据库-强制按需读取值

firebase - Firebase 安全规则中的临时变量

ios - @IBOutlet 和@IBAction 引用了错误的项目,如何摆脱这些引用?

iOS 模拟器出现所需大小的一半

ios - UITableView Header 显示后面的内容

ios - 刷新 UITableView 而不刷新节标题

android - 在 Firebase UI 中开始监听

ios - 预加载图像ios应用程序

html - 如何更改 ios 中段落中的特定字符串?

ios - 取消选择行后如何取消突出显示 UITableView 中的附件?