[英]Firebase data taking ages to load in tableview swift 3
我有一個可從Firebase加載數據的表視圖,加載時似乎要花一些時間,大約需要10到15秒才能在該表視圖中顯示任何數據。 加載該數據時,該應用也被凍結。
我獲取數據的功能是:在viewDidLoad中調用
func getTrackData() {
let result = FIRDatabase.database().reference(withPath: "tracks")
result.observe(.value, with: { snapshot in
var newItems: [newTracks] = []
for item in snapshot.children {
let trackDetails = newTracks(snapshot: item as! FIRDataSnapshot)
newItems.append(trackDetails)
}
self.items = newItems
self.items.sort(by: {$0.distance < $1.distance})
self.tableView.reloadData()
})
}
和我的tableview如下:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "TrackCell", for: indexPath) as? TrackCell {
let tr: newTracks!
if inSearchMode {
tr = filteredTrack[indexPath.row]
cell.configureCell(track: tr)
} else {
tr = items[indexPath.row]
cell.configureCell(track: tr)
}
cell.configureCell(track: tr)
cell.completion = {
let coordinate = CLLocationCoordinate2DMake(tr.lat,tr.lon)
let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate,addressDictionary:nil))
mapItem.name = tr.name
mapItem.openInMaps(launchOptions: [MKLaunchOptionsDirectionsModeKey :MKLaunchOptionsDirectionsModeDriving])
return()
}
cell.completion1 = {
let url = URL(string: tr.link)!
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.open(url)
}
return()
}
return cell
} else {
return UITableViewCell()
}
}
我的問題是,此代碼是否可以編寫,還是有更好的方法來實現? 我擔心我的功能是獲取每個項目,然后重新加載tableview,這可能會大大降低速度。 我的數據不是很大,這是一個例子。
顯示1條完整記錄,總共131條記錄。
現在解決了這個問題,我計算出要加載的每組數據與當前位置之間的距離(以英里為單位)。 這大大降低了Tableview人口。
現在只需要弄清楚如何執行此計算,但是也許在數據加載之后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.