1
以下方法是我的刷新數據方法。它會從firebase中讀取最新的數據。因爲firebase不同步,所以我在endRefreshing等待5秒鐘後等待Firebase完成閱讀過程。如何在完成從Firebase加載時刷新UIRefreshControl端點
func refreshData() {
//Remove old data
self.items.removeAll()
//Renew all data
var ref: DatabaseReference!
ref = Database.database().reference(withPath: "tasks")
//Loading local drafts
var drafts : [Task]!
if let local_drafts = NSKeyedUnarchiver.unarchiveObject(withFile: Task.ArchiveURL.path) as? [Task] {
drafts = local_drafts
}
else{
drafts = []
}
//Reloading the database
ref.observe(.value, with: { snapshot in
var newItems: [Task] = []
self.num_of_tasks = Int(snapshot.childrenCount)
for item in snapshot.children {
//let local = item as! DataSnapshot
//let snapshotValue = local.value as! [String: AnyObject]
//print(snapshotValue["main_content"] as! String!)
let taskItem = Task(snapshot: item as! DataSnapshot)
newItems.append(taskItem!)
}
let merged = drafts + newItems
self.items = merged
self.tableView.reloadData()
//Wait for 5 seconds
let deadlineTime = DispatchTime.now() + .seconds(3)
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: {
self.refreshControl!.endRefreshing()
})
})
}
但由於有時所有的數據被加載,但清爽仍在繼續,這使得它奇怪,這不是一個很好的解決方案。有沒有辦法解決這種情況?使refreshControl結束刷新,直到我加載來自Firebase的所有數據?
我見過幾篇關於completionHandler的文章,但是當我使用它時,它說「未定義的標識符」。這是一個內置的類嗎? –
@萬慧喬,不,這個解決方案應該可以工作......你從哪裏得到這個錯誤? –
唯一的錯誤是「使用未解析的標識符completionHandler」。 –