0
好的,如果這可能是一個非常基本的問題,請原諒我,但是如何刷新我的tableView並只添加新項目到Firebase?Swift Firebase:使用.child添加UIRefreshControl
我正在嘗試爲我的tableView實現'pull to refresh'並使用已添加到Firebase的新項目填充我的tableView。在viewDidLoad中,我調用.observeSingleEvent(.value)來顯示錶格。
在刷新函數中,我調用.observe(.childAdded)。但是這樣做會使應用程序始終監聽添加的內容,使我的應用程序始終能夠重新加載數據。我如何編寫代碼才能在刷新時刷新?到目前爲止我的代碼:
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),但它只能翻出從火力地堡一個單一的入口(最頂端的條目)。
我不確定我的方法是否正確。任何建議在這裏,謝謝。
你好!是的,它的作品!謝謝。 – Koh
你好,儘管上述方法有效,但從長遠來看可能無法持續。如果用戶要刪除事件,並且事實證明laskKey被刪除,則會導致應用程序崩潰。有沒有更好的方法來解決這個問題? – Koh
它會導致應用程序崩潰嗎?我相當肯定它只是不返回任何結果,或者只是略過這個鍵,但我可能是錯的。你測試過了嗎? –