为什么在iOS模拟器中没有调用LocationManager,但它是在手机上调用的?

时间:2015-04-07 05:05:07

标签: ios swift core-location

//in my viewDidLoad()
    self.locationManager.requestWhenInUseAuthorization()
    self.locationManager.delegate = self
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    self.locationManager.startUpdatingLocation()
    self.locationManager.startMonitoringSignificantLocationChanges()

    if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Denied{
        println("location not authorized")
    }


//somewhere down the file

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    println("Location") //this prints on the phone, not simulator
    self.locationManager.stopUpdatingLocation()
}

我在plist中也有“NSLocationWhenInUseUsageDescription”。

enter image description here

5 个答案:

答案 0 :(得分:3)

只需从此处重置模拟器:

enter image description here

希望它有所帮助。

答案 1 :(得分:0)

这是与iOS 8相关的问题。您必须在.plist文件中放置NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription个键(值可能是将在位置警报中显示的其他消息)。这些密钥在iOS 8中是必需的。

它如何在Apple指南中说:

我最终解决了自己的问题。

显然在iOS 8 SDK中,在开始位置更新之前需要requestAlwaysAuthorization(用于后台位置)或requestWhenInUseAuthorization(仅在前景时的位置)调用CLLocationManager

Info.plist中还需要NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription键,并在提示中显示消息。添加这些解决了我的问题。

self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.startUpdatingLocation()
self.locationManager.startMonitoringSignificantLocationChanges()
self.locationManager.requestWhenInUseAuthorization()

答案 2 :(得分:0)

目前iOS8 beta5中存在一个错误,该错误始终会停用您应用的地理定位服务(至少对我来说是这样)。

进入设置>隐私>位置服务>你的应用>总是

但我不知道为什么,但即使您将其设置为“始终”,此设置也会自动停用,因此请耐心等待并经常返回设置以再次配置您的应用位置。

答案 3 :(得分:0)

在第一次模拟器启动时,即使通过设置,也不会初始化位置 调试 - >位置 - >来自ios8的自定义位置。因此,您需要先从debug-> Location-> None中选择无选项,如下面的

[![enter image description here][1]][1]
[1]: http://i.stack.imgur.com/WAl14.png

and then next you should following

[![enter image description here][2]][2]

  [2]: http://i.stack.imgur.com/oCtfB.png

现在终于你应该再次在模拟器上运行你的应用程序并使用 您的plist中的NSLocationWhenInUseUsageDescription键应使用以下代码:

locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()

答案 4 :(得分:-2)

模拟器中没有启用GPS。所以对于位置基础的东西,我们应该使用Device。默认情况下,模拟器将始终为您提供位置(0,0)。