问题:
出于某种原因,我正在处理的应用程序并不是要求使用位置服务的许可。以前这曾经工作过。另外,我创建了一个新项目,我按照下面描述的步骤完成了这项工作。
一个区别是我知道我正在处理的主应用程序中的授权状态是.Denied,它在测试项目中是.NotDetermined。
我在堆栈溢出时读到了这个问题:
Core Location not requesting user permission ' 没有多少人知道这一点,但在卸载应用程序后,该应用程序的文档和首选项仍存储在设备上,此处:
/ var / mobile / Library / Safe Harbor / myappidentifier / Container / 在我看来,这不是苹果的明智之举,因为这可能会带来安全隐患,就像你上面解释过的那样。
如果重新安装了某个应用,iOS会自动将这些首选项复制回相应的文件夹中。这就是你所看到的行为的原因。 ' 这可以解释它,因为我确实重新安装了应用程序,但它没有说明如何解决它。
谢谢
这是我在App中写的相关代码:
我在info.plist中设置了NSLocationAlwaysUsageDescription键
我导入了核心位置:
import CoreLocation
实施了正确的协议:
CLLocationManagerDelegate
设置此属性:
var locationManager = CLLocationManager()
在ViewDidLoad中设置委托
locationManager.delegate = self
并写了一个测试函数来测试这个:
if CLLocationManager.locationServicesEnabled() {
println("Location Services Enabled")
if CLLocationManager.authorizationStatus() == .Authorized {
println("Location Services Authorized")
} else if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse {
println("Location Services Authorized WHEN IN USE")
} else if CLLocationManager.authorizationStatus() == .NotDetermined {
println("Location Services NOT Authorized: NOT DETERMINED")
} else if CLLocationManager.authorizationStatus() == .Restricted {
println("Location Services NOT Authorized: RESTRICTED")
} else if CLLocationManager.authorizationStatus() == .Denied {
println("Location Services NOT Authorized: DENIED")
} else {
println("Location Services NOT Authorized")
locationManager.requestAlwaysAuthorization()
}
} else {
println("!!! Location Services NOT Enabled !!!")
}
控制台输出:
Location Services Enabled
Location Services NOT Authorized
答案 0 :(得分:1)
您可以进入“设置”应用“常规”,然后重置“位置”和“放置位置”。隐私,以便再次获取应用的初始权限对话框。否则,iOS会保存第一个答案,而不会再问。