当前位置: 首页 > 面试题库 >

使用Info.plist中的NSLocationWhenInUseUsageDescription键在iOS 8中无法使用requestWhenInUseAuthorization()

徐隐水
2023-03-14
问题内容

我正在使用iOS SDK
8.1尝试调用requestWhenInUseAuthorization()方法来提示用户授予对我的应用的访问权限。我导入了CoreLocation.framework,并将NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription键添加到info.plist中。当我运行该应用程序时,它从未提示我访问位置。以下是我的代码,我错过了什么?

import UIKit
import CoreLocation
import MapKit

class ViewController: UIViewController, CLLocationManagerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        var manager = CLLocationManager()
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest

        let authorizationStatus = CLLocationManager.authorizationStatus()
        switch authorizationStatus {
        case .Authorized:
            println("authorized")
        case .AuthorizedWhenInUse:
            println("authorized when in use")
        case .Denied:
            println("denied")
        case .NotDetermined:
            println("not determined")
        case .Restricted:
            println("restricted")
        }

        manager.requestWhenInUseAuthorization()
        manager.startUpdatingLocation()

    }

    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
        let location = locations[0] as CLLocation
        println("Latitude: \(location.coordinate.latitude). Longitude: \(location.coordinate.longitude).")
    }

    func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        switch status {
        case .Authorized:
            println("authorized")
        case .AuthorizedWhenInUse:
            println("authorized when in use")
        case .Denied:
            println("denied")
        case .NotDetermined:
            println("not determined")
        case .Restricted:
            println("restricted")
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

控制台只显示一次“不确定”,没有其他显示。所以我去了iPhone Simulator
=>设置=>隐私=>位置=>我的应用。它向我显示了3个选项:“从不”,“在使用应用程序时”,“始终”。但是什么也没选择。


问题答案:

问题解决了。我manager被声明为viewDidLoad()方法内部的var ,但是它应该是一个类级别的属性。

manager声明从中移出后viewDidLoad(),我的应用程序开始运行。

不确定如何manager.requestWhenInUseAuthorization()在幕后精确工作,以及为什么在其中精确manager定义viewDidLoad()不起作用。希望知道这个细节的人能启发我。



 类似资料:
  • 不可能开始这个项目。我收到的是: “干净的溶液”对我没有帮助。/users/admin/library/developer/coresimulator/devices/0b7ee295-6bf3-41b6-aca8-d4771ec65ab3/data/library/caches/com.apple.mobile.installd.staging/

  • 我刚在Ubuntu12.04中设置了Android开发环境。我制作了一个Android2.3.3版的AVD并在上面运行了我的应用程序。但我不能使用我的电脑键盘或键盘右侧给它。这是什么原因呢? 我的ADT版本是20.0。我早些时候在Windows上开发,它运行良好。

  • 问题内容: 我正在研究要与Jenkins 2.0一起使用的Jenkinsfile。无法识别该方法。我缺少一些配置以使其可用吗? 我的Jenkinsfile: 运行时,出现以下错误: among [AWSEBDeployment, archive, bat, build, catchError, checkout, deleteDir, dir, echo, emailext, error, fil

  • 问题内容: 尝试更改表时出现此错误。 这是我成功运行的CREATE TABLE STATEMENT。 然后,我尝试执行此语句,但出现了以上错误。 问题答案: 外键字段和引用的类型和定义必须相同。这意味着您的外键不允许更改字段的类型。 一种解决方案是: 现在您可以更改您的person_id 重新创建外键 编辑: 上面添加了锁,感谢评论 在执行此操作时,您必须禁止写入数据库,否则可能会冒数据完整性问题

  • 我已经实际搜索但没有找到解决方案在任何网站。我试图在MacOS中使用Java3D用Java编写一个程序,我试图在Eclipse中使用Java3D。我正在尝试运行一个简单的HelloUniverse代码,但我得到了以下异常: 我已经在构建路径中添加了j3dcore.jar、vecmath.jar和j3dutils.jar以及一系列其他库,但似乎都不起作用。 有谁能帮助我在Mac中使用eclipse中