如何在 Xcode 6.3.2 中请求用户位置 [重复]
Posted
技术标签:
【中文标题】如何在 Xcode 6.3.2 中请求用户位置 [重复]【英文标题】:How to request user location in Xcode 6.3.2 [duplicate] 【发布时间】:2015-06-17 15:19:17 【问题描述】:我正在尝试在使用应用程序时请求用户的位置。我已将 NSLocationWhenInUseUsage 添加到我的 plist 中。该应用程序不会崩溃或以其他方式显示任何错误。该应用程序刚刚启动,没有任何弹出请求用户许可。
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate
@IBOutlet weak var map: MKMapView!
var locationManager = CLLocationManager()
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
locationManager.requestWhenInUseAuthorization()
我还在我的代码中添加了这个函数:
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!)
println(locations)
另外,我不是一个熟练的程序员,所以更简单的答案会更好。
【问题讨论】:
【参考方案1】:没有任何弹出请求用户权限
即使您拨打locationManager.requestWhenInUseAuthorization()
,也不会出现对话框,除非 (1) 位置服务已打开,并且 (2) 此应用的位置授权未确定。
换句话说,只有当用户可以进行有意义的授权时才会出现对话框。如果位置服务不可用、授权已被拒绝或此设备受到限制,则用户无法授权。
【讨论】:
那么如何查看授权状态呢?我假设我会在 locationManager.requestWhenInUseAuthorization 之前做一个 if then 语句,但我不知道用什么命令来检查它(对不起,我不熟悉如何引用所有不同的词汇部分代码)。 —— 在这里查看我的解释:***.com/a/30495310/341994 这是用目标 c 编写的。我真的不明白,无法破译这个解释。如果我能找到可以查看代码并以这种方式学习的地方,那就太棒了。 什么?我的答案不是用 Objective-C 或英语以外的任何语言编写的。它解释了你需要做什么的逻辑。这样做。【参考方案2】:正如马特在他的回答中所说,您需要先检查授权状态。如果你不确定,那么你应该调用 requestWhenInUseAuthorization。
完成后,您需要等待对您的委托方法locationManager:didChangeAuthorizationStatus
的调用。当用户完成对位置服务的授权(或拒绝)时,将调用委托方法。
【讨论】:
那么如何查看授权状态呢?我假设我会在 locationManager.requestWhenInUseAuthorization 之前做一个 if then 语句,但我不知道用什么命令来检查它(对不起,我不熟悉如何引用所有不同的词汇部分代码)。 您应该真正阅读 Xcode 文档中的 CLLocationManager 类参考。有一个类方法authorizationStatus可以让你查询它。以上是关于如何在 Xcode 6.3.2 中请求用户位置 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xcode 中从 UIActivityViewController 共享用户位置
Xcode MapKit:如何在特定位置输入时触发事件[关闭]