1
我試圖從我的firebase後端檢索數據 - 每個條目都有一個用戶名,lat和long。從查看其他stackoverflow問題,我發現CoreLocation應該按照距離我們嘗試使用的距離(或者距離(從:) :)方法進行排序。它似乎沒有按預期工作。我想知道我做錯了什麼。Swift - 根據從Firebase DB獲取的數據的最近位置排序DB
import UIKit
import Firebase
import FirebaseDatabase
import MapKit
import CoreLocation
class RequestVC: UITableViewController, CLLocationManagerDelegate {
var locationManager = CLLocationManager()
var sellerUserNames = [String]()
var requestLocations = [CLLocationCoordinate2D]()
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "backToMain" {
self.navigationController?.navigationBar.isHidden = true
}
}
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Sell_Request").observe(FIRDataEventType.childAdded, with: { (FIRDataSnapshot) in
if let data = FIRDataSnapshot.value as? NSDictionary {
if let name = data[Constants.NAME] as? String {
if let lat = data["latitude"] as? Double {
if let long = data["longitude"] as? Double {
print("\(self.sellerUserNames) Location: Latitude: \(lat), Longitude: \(long)")
self.sellerUserNames.append(name)
self.requestLocations.append(CLLocationCoordinate2D(latitude: lat, longitude: long))
self.tableView.reloadData()
}
}
}
}
})
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sellerUserNames.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let location = locationManager.location?.coordinate
let buyerLocation = CLLocation(latitude: (location?.latitude)!, longitude: (location?.longitude)!)
let sellerLocation = CLLocation(latitude: requestLocations[indexPath.row].latitude, longitude: requestLocations[indexPath.row].longitude)
let distance = buyerLocation.distance(from: sellerLocation)/1000
let roundedDistance = round(distance * 100)/100
let distanceInMiles = roundedDistance * 0.621
let roundedDistanceInMiles = round(distanceInMiles * 1000)/1000
cell.textLabel?.text = sellerUserNames[indexPath.row] + " - \(roundedDistanceInMiles) miles away"
return cell
}
}
您可以將代碼修剪到[MWE](http://stackoverflow.com/help/mcve)嗎?您無需展示Firebase的任何問題。只需顯示座標列表以及希望它們在tableview中顯示的順序。 –
修剪了一下,抱歉。 – user2411290