我有一个从Firebase加载数据的tableview,在加载它似乎需要很长时间,大约10-15秒才能在tableview中显示任何数据。在加载此数据时,它似乎也会冻结应用程序。
我获取数据的函数是:这在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条记录。
答案 0 :(得分:0)
现在解决这个问题,我计算了当前位置的距离,以及正在加载的每组数据。这大大减缓了tableview的数量。
现在只需要计算如何进行此计算,但可能在数据加载后