- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 swift 为 iOS 9.3 编写一个应用程序,需要一张 map 来显示用户位置。我初始化 CLLocationManager 及其委托(delegate),我配置 info.plistPrivacy - Location Usage Description 字符串并调用 requestWhenInUseAuthorization 但它不显示任何授权请求。
这是我的代码:
import UIKit
import MapKit
class DetailController: UIViewController, CLLocationManagerDelegate {
var locManager: CLLocationManager!
@IBOutlet var myMap: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
mostraPosizione()
}
func mostraPosizione(){
locManager = CLLocationManager()
locManager.delegate = self
locManager.desiredAccuracy = kCLLocationAccuracyBest
let authorizationStatus = CLLocationManager.authorizationStatus()
if (authorizationStatus == CLAuthorizationStatus.NotDetermined) {
locManager.requestWhenInUseAuthorization()
} else {
locManager.startUpdatingLocation()
}
myMap.showsUserLocation = true
}
func locManager(manager: CLLocationManager,
didChangeAuthorizationStatus status: CLAuthorizationStatus) {
if (status == CLAuthorizationStatus.NotDetermined) {
locManager.requestWhenInUseAuthorization()
} else {
locManager.startUpdatingLocation()
}
}
}
Xcode 输出:
Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.
我正在 iPhone 5s (iOS 9.3) 模拟器上测试它。
这东西有什么问题?有人有什么建议吗?
最佳答案
我觉得是因为
let authorizationStatus = CLLocationManager.authorizationStatus()
是 nil
,所以您的 requestWhenInUseAuthorization()
永远不会被调用。
let authorizationStatus = CLLocationManager.authorizationStatus()
if (authorizationStatus == CLAuthorizationStatus.NotDetermined) || (authorizationStatus == nil) {
locManager.requestWhenInUseAuthorization()
} else {
locManager.startUpdatingLocation()
}
应该可以工作。
编辑:
如果用户拒绝请求,你也应该处理这个案例
if (authorizationStatus == CLAuthorizationStatus.Denied ) {
// Display a message, do what you want
}
确实,一旦用户拒绝授权,您就无法再次出现弹出窗口,用户必须进入应用程序设置并自行设置使用其位置的授权。但是,您现在可以直接从您的应用程序到设置的链接,因此对用户来说更容易。
// Open the settings of your app
if let url = NSURL(string:UIApplicationOpenSettingsURLString) {
UIApplication.sharedApplication().openURL(url)
}
关于Swift requestWhenInUseAuthorization 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36972138/
我正在尝试创建一种 locationServices 权限身份验证,只有当应用程序具有 locationServices 权限时,您才能使用该应用程序。因此,如果用户拒绝 locationManage
我有一个关于我正在制作的应用程序的问题,加载的第一页询问用户是否允许使用 requestWhenInUseAuthorization 方法使用他们的位置。他们要么授予它,要么不授予它,这很公平,但如果
我正在使用 swift 为 iOS 9.3 编写一个应用程序,需要一张 map 来显示用户位置。我初始化 CLLocationManager 及其委托(delegate),我配置 info.plist
当我的观点出现时: struct TurnOnLocation: View { var body: some View { ZStack { C
我正在尝试使用位置管理器检索用户在应用程序中的位置;正如苹果文档中所解释的,我创建了以下方法: func startReceivingLocationChanges() { let autho
错误: Trying to start MapKit location updates without prompting for location authorization. Must call
错误截图: 代码: if (_locationManager == nil) { _locationManager = [[CLLocationManager alloc] init
我在 plist 上有这段代码: NSLocationUsageDescription Usage NSLocationWhenInUsageDescription WhenIn NSLocation
我正在尝试在我的 iOS 应用程序中使用定位服务,但由于某些原因 requestWhenInUseAuthorization 无法正常工作。当用户第一次使用该应用程序时,提示会正常要求权限,但是当您第
在我的 viewDidLoad 方法中,我有 locationManager = [[CLLocationManager alloc]init]; // initializing locationMa
我的应用曾经使用 requestAlwaysAuthorization 和 NSLocationAlwaysUsageDescription 的 Info.plist 条目。 我将其更改为使用 req
我正在尝试对用户的位置状态进行验证。我实例化了 CLLocationManager,每当我尝试调用 requestAlwaysAuthorization 或 requestWhenInUse 时,我都
我希望我的应用显示用户的位置,但它不要求 WhenInUseAuthorization。我在 Info.plist 中添加了 NSLocationWhenInUseUsageDescription 键
我正在尝试使用 CLLocationManager 获取用户的位置。这是我的简单代码: if(IS_OS_8_OR_LATER) { if ([self.locationManager res
让 tvOS 提示用户进行位置数据授权似乎有点麻烦。我从字面上复制并粘贴了 iOS 的工作代码,它似乎没有提示用户。我正在使用下面列出的代码以及带有字符串值的 NSLocationWhenInUseU
我试图让我的 AppProject iOS 8 准备就绪。我读了很多关于 [_locationManager requestWhenInUseAuthorization]; 和plist中的条目 NS
我在主线程上调用 -[CLLocationManager requestWhenInUseAuthorization]。我已经设置了我的委托(delegate),并在 info.plist 中为 NS
这是我的代码,显示 map 上当前位置的警报和蓝点: MapName.h #import #import #import @interface MapName : UIViewControlle
我正在使用最新的 Xcode 版本开发一个处理地理定位的应用程序。我使用这行代码并且已经在我的 plist 文件中添加了描述: [self.locationManager requestWhenInU
我正在尝试在我的 iOS 应用程序上使用用户位置。该应用程序适用于 iOS 7,但不适用于 iOS 8。 我都试过了。看了一堆教程,我知道在 iOS 8 中我们需要调用 requestWhenInUs
我是一名优秀的程序员,十分优秀!