CLLocationManager不适用于UITableView第一页上的单元格

时间:2016-02-29 08:48:11

标签: ios swift uitableview cllocationmanager

我正在使用CLLocationManager来获取当前位置,并且我打印距离(从我当前的位置)到表格单元格中的每个位置。

class TableViewController: UITableViewController, CLLocationManagerDelegate, MKMapViewDelegate {

var thisLocationManager = CLLocationManager()
var myLocation = CLLocation()

...

override func viewDidLoad() {  

   ...

   if CLLocationManager.locationServicesEnabled() {
        self.thisLocationManager.requestAlwaysAuthorization()
        self.thisLocationManager.requestWhenInUseAuthorization()
        thisLocationManager.delegate = self
        thisLocationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        thisLocationManager.startUpdatingLocation()
    }
}

func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) {
    myLocation = newLocation
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> SpotCell {
    let row = self.list[indexPath.row]

    let cell = tableView.dequeueReusableCellWithIdentifier("SpotCell") as! SpotCell

    if CLLocationManager.locationServicesEnabled() {
        // for checking 
        print("Row \(indexPath.row): lati \(myLocation.coordinate.latitude), long \(myLocation.coordinate.longitude)")

        let spotLocation = CLLocation(latitude: Double(row.latitude)!, longitude: Double(row.longitude)!)
        let distance = round(myLocation.distanceFromLocation(spotLocation) / 10) / 100
        cell.spotInfo.text = "\(row.spotrank), distance \(distance)km"
    } else {
        cell.spotInfo.text = row.spotrank
    }

    return cell
}

这是我用于获取当前位置的代码 当我在iOS9模拟器上设置坐标并运行应用程序时

对于第一个单元格,控制台说:
第0行:lati 0.0,长0.0
第1行:lati 0.0,长0.0
第2行:lati 0.0,long 0.0
第3行:lati 0.0,长0.0
第4行:lati 0.0,long 0.0
第5行:lati 0.0,long 0.0

然后当我向下滚动时...
第6行:lati 51.530466,长-0.123833
第7行:lati 51.530466,长-0.123833
第8行:lati 51.530466,长-0.123833
这些是我设定的坐标。它适用于下一个单元格。

当我向后滚动时 第2行:lati 51.530466,长-0.123833
第1行:lati 51.530466,长-0.123833
第0行:lati 51.530466,长-0.123833

那为什么这不适用于第一页呢?

1 个答案:

答案 0 :(得分:0)

听起来好像你在第一页上要求它时没有加载那些必要的数据,但之后就可以了。一旦有了可用的位置,你需要实现一些方法来检测,然后用这些数据(重新)设置单元格。

好消息是你已经有了这种方法!收到func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) 的消息后,请致电self.tableView.reloadData(),您就会收到数据!