このtutorialでは、Firebaseコードがコントローラの外部に散在しています。これにより、reload()
コードが既存の.observe()
にあるため、Firebaseが返ってくるときにテーブルビューを簡単に読み込むことができます。Firebaseタスクの完了を聞くには?
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コードがクラス内にある場合、どのように処理できますか?再ロードするにはまだテーブルビューが必要ですが、Firebaseが復帰した後でなければなりません。
f.performCompletedQuery()
self.tableView.reloadData()
f.performCompletedQuery()
が実行されますが、データはまだFirebaseから取得している間にコードパスが続行されます:それはこのようになります。 self.tableView.reloadData()
が起動し、テーブルが空になります(Firebaseがまだ返されていないため)。
私はFirebaseの観測を複製する必要があると思いますが、それをクラスに公開し、既存の観測を取り戻すことはできますか?少し畳み込まれているようだ。より良い方法がありますか?たぶん、ブロックして表示し、アニメーションしていますか?
performCompletedQuery()にcompletionBlockを追加すると考えられますか? – Dravidian