我的Swift-iOS应用程序旨在显示用户在地图上的位置。但是,XCode调试控制台告诉我,我需要请求权限才能显示用户的位置。我想,我这样做,但对话永远不会出现。
这是错误消息,在我调用CLLocationManager::requestWhenInUseAuthorization()
错误:
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也无济于事。
答案 0 :(得分:26)
从iOS 8开始,您必须调用其中一个请求...函数,并将相应的条目添加到您的Info.plist文件中,NSLocationWhenInUseUsageDescription
或NSLocationAlwaysUsageDescription
。
有关详细信息,请参阅参考here
确保
Debug > Location
下的模拟器中执行此操作。调试区域:
答案 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键中的文本,并且在调用此方法时必须存在该键。