iOS应用不会要求获得位置许可

时间:2014-06-30 19:52:12

标签: ios swift mapkit core-location

我的Swift-iOS应用程序旨在显示用户在地图上的位置。但是,XCode调试控制台告诉我,我需要请求权限才能显示用户的位置。我想,我这样做,但对话永远不会出现。

这是错误消息,在我调用CLLocationManager::requestWhenInUseAuthorization()

的ViewController下面

错误:

  

2014-06-30 21:25:13.927 RowingTracker2 [17642:1608253]尝试在不提示位置授权的情况下启动MapKit位置更新。必须首先调用 - [CLLocationManager requestWhenInUseAuthorization]或 - [CLLocationManager requestAlwaysAuthorization]。

的ViewController:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate {
    @IBOutlet var mapview: MKMapView = nil
    var locationmgr : CLLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        locationmgr = CLLocationManager()
        locationmgr.requestWhenInUseAuthorization()
        mapview.showsUserLocation = true
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

如何申请授权使用该位置? 您可以找到完整的项目here。(Commit

信息

即使让ViewController从CLLocationManagerDelegate继承并将代理设置为self,如图所示here也无济于事。

4 个答案:

答案 0 :(得分:26)

从iOS 8开始,您必须调用其中一个请求...函数,并将相应的条目添加到您的Info.plist文件中,NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription

有关详细信息,请参阅参考here

更新

确保

  1. 地图以模拟位置为中心。
  2. 还要确保模拟某个位置。可以在XCode的调试区域(下方)中执行此操作(请参阅图像),也可以在Debug > Location下的模拟器中执行此操作。
  3. 调试区域: Location Simulation in the debug area

答案 1 :(得分:8)

您需要使用requestWhenInUseAuthorization并且还需要在yourapp-Info.plist中创建一个名为NSLocationWhenInUseUsageDescription的值

答案 2 :(得分:2)

我使用NSLocationAlwaysUsageDescription将值作为在请求权限时弹出的文本,例如

  

"我希望24/7"

允许你监视你

我还会将NSLocationWhenInUseUsageDescription与值一起添加为消息。

答案 3 :(得分:0)

正如 David Berry Cayke Prudente Levi Johnson 所述,我只需要在{{1 }}文件。为了进一步了解我为什么需要这样做,我去了进一步的文档资料,并在此处分享,因为它可以像帮助我一样帮助其他人。

  

用户提示符包含应用程序的Info.plist文件中NSLocationWhenInUseUsageDescription键中的文本,并且在调用此方法时必须存在该键。

https://developer.apple.com/documentation/corelocation/cllocationmanager/1620562-requestwheninuseauthorization