CLLocationManager.location 在 10.10 中为零,但在 10.11 中有效

Posted

技术标签:

【中文标题】CLLocationManager.location 在 10.10 中为零,但在 10.11 中有效【英文标题】:CLLocationManager.location is nil in 10.10, but works in 10.11 【发布时间】:2016-08-18 21:18:28 【问题描述】:

在我的DC Metro tracking application 中,我使用CoreLocation 选择离用户最近的地铁站,并显示他们附近的车站列表。

它在 macOS 10.11 中完美运行,但我无法让它在 macOS 10.10 上运行。为了调试它,我在TodayViewController.swiftlocationManager(_:didUpdateLocations:) 方法中插入了一行来打印应用程序获取的位置。

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) 
    LocationManager.sharedManager.stopUpdatingLocation()

    print(LocationManager.sharedManager.location)

    ...

在 El Capitan 上,这会将以下内容输出到控制台(成功):

Optional(<+38.92208178,-77.22920176> +/- 65.00m (speed -1.00 mps / course -1.00) @ 8/18/16, 5:04:37 PM Eastern Daylight Time)

在 Yosemite 上,它只输出 nil

我也尝试过模拟我的位置,但无济于事。

有人有什么建议吗? Yosemite 机器上启用了定位服务,我知道它正在工作,因为天气通知中心小部件正在正确获取其位置。

谢谢!

更多相关代码:

override func viewWillAppear() 
    super.viewWillAppear()

    ...

    switch CLLocationManager.authorizationStatus() 
    case .Authorized:
        if !didSelectStation 
            selectedStationLabel.stringValue = "Determining closest station..."
        
        LocationManager.sharedManager.startUpdatingLocation()
    case .NotDetermined:
        getCurrentLocationButton.hidden = false
        mainPredictionView.hidden = true
    default:    // Denied or Restricted
        WMATAfetcher.getPredictionsForSelectedStation()
    


class LocationManager 
    static let sharedManager: CLLocationManager = 

        let locationManager = CLLocationManager()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.distanceFilter = 100.0

        return locationManager
    ()

我还有一个按钮,getCurrentLocationButton,它调用startUpdatingLocation()

@IBAction func getCurrentLocation(sender: NSButton) 
    LocationManager.sharedManager.startUpdatingLocation()

【问题讨论】:

您在致电stopUpdatingLocation() 之前尝试过打印吗?另外,你实现locationManager(_:didFailWithError:)委托方法了吗? 是的,对不起,我忘了提到我确实实现了locationManager(_:didFailWithError:) 委托方法。我认为自从我在locationManager(_:didUpdateLocations:) 中对print() 的调用执行后,我不必担心它。作为健全性检查,我在该方法中添加了print() 语句,它在运行时没有执行。谢谢你,@Deyton! 您最初的建议已解决!当我将LocationManager.sharedManager.stopUpdatingLocation() 调用移到print(LocationManager.sharedManager.location) 之后时,它成功显示了当前位置。再次感谢@Deyton! 太棒了!我会将该建议移至答案。 【参考方案1】:

在调用stopUpdatingLocation()之前,您是否尝试过访问location

【讨论】:

以上是关于CLLocationManager.location 在 10.10 中为零,但在 10.11 中有效的主要内容,如果未能解决你的问题,请参考以下文章