【发布时间】:2015-01-29 13:55:18
【问题描述】:
当您在 Interface Builder 中将 MKMapView 组件添加到视图时,有一些复选框可以让您配置它的显示内容:
当您选中“用户位置”时,它会自动在地图上显示用户的位置。
但是,从 iOS 8 开始,您应该在显示用户位置之前请求位置许可。如果不这样做,您会在控制台中收到“尝试在不提示的情况下启动 MapKit 位置更新”警告。
所以我在 plist 中添加了一个 NSLocationWhenInUseUsageDescription 键,并将此代码添加到 viewDidLoad:
if CLLocationManager.authorizationStatus() == .NotDetermined {
CLLocationManager().requestWhenInUseAuthorization()
}
这似乎不起作用。我确实收到了一个请求许可的弹出窗口,但在我选择答案之前,它会自行隐藏,地图会在其下方加载,并且我会在控制台中收到警告。
我知道我可以在代码中设置showsUserLocation 属性,只有在获得许可后;但我的观点是,IB 中有这个复选框应该做同样的事情,除了它立即开始跟踪。这是否意味着自 iOS 8 以来我们根本不应该使用此复选框?还是我用错了?
--
更新:实际上,无论是否设置了“显示用户位置”,弹出窗口都会自行隐藏。我已经尝试在viewWillAppear 或viewDidAppear 中这样做,但这并没有帮助。所以我不确定在使用MKMapView 时我应该在哪里调用requestwhenInUseAuthorization...
【问题讨论】:
标签: ios ios8 mapkit core-location cllocationmanager