これは非常に基本的な質問かもしれませんが、私はテーブルビューをリフレッシュしてFirebaseに追加された新しいアイテムのみを表示するにはどうしたらいいですか?Swift Firebase:UIRefreshControl with .childAdded
私は、テーブルビューのために 'プルするためのリフレッシュ'を実装し、テーブルビューにFirebaseに追加された新しいアイテムを設定しようとしています。 viewDidLoadでは、.observeSingleEvent(.value)を呼び出してテーブルを表示します。
リフレッシュ機能では、.observe(.childAdded)を呼び出します。しかし、そうすることで、アプリケーションは一貫して追加されたものをリッスンし、アプリケーションを一貫してreloadingDataにします。私が「リフレッシュする」ときにリフレッシュするようにコードを作成するにはどうすればよいですか?これまでの私のコード:
lazy var refresh: UIRefreshControl = {
let refresh = UIRefreshControl(frame: CGRect(x: 50, y: 100, width: 20, height: 20))
refresh.addTarget(self, action: #selector(refreshData), for: .valueChanged)
return refresh
}()
var eventsArray: [FIRDataSnapshot]! = []
override func viewDidLoad() {
super.viewDidLoad()
ref = FIRDatabase.database().reference()
ref.child("events").observeSingleEvent(of: .value, with: { (snapshot) in
for snap in snapshot.children {
self.eventsArray.insert(snap as! FIRDataSnapshot, at: 0)
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
}) { (error) in
print(error.localizedDescription)
}
}
func refreshData() {
self.eventsArray = []
ref.child("events").observe(.childAdded, with: { (snapshot) in
print(snapshot)
self.eventsArray.insert(snapshot, at: 0)
DispatchQueue.main.async {
self.refresh.endRefreshing()
self.tableView.reloadData()
}
}) { (error) in
print(error.localizedDescription)
}
}
は私もobserveSingleEvent(.childAdded)を試みたが、それは唯一Firebaseから1つのエントリ(最上部のエントリを)引き出します。
私のアプローチが正しいかどうかはわかりません。どんな助言もここにpls、ありがとう。
こんにちは!はい、それは動作します!ありがとう。 – Koh
そこに、上記の方法は機能しますが、長期的には持続可能ではないかもしれません。ユーザーがイベントを削除して、laskKeyが削除されたことが判明した場合、アプリケーションがクラッシュする可能性があります。これを解決する良い方法はありますか? – Koh
アプリがクラッシュすることはありますか?私はそれが結果を返さないか、単にそのキーをスキップするだけで、間違っているかもしれないと確信しています。あなたはそれを試しましたか? –