gpt4 book ai didi

swift - CLAuthorizationStatus AuthorizedWhenInUse 仅在第一次调用

转载 作者:行者123 更新时间:2023-11-28 07:06:46 25 4
gpt4 key购买 nike

如果我在加载我的应用程序第一个 View Controller 后不请求“AuthorizedWhenInUse”状态,那么我将永远不会得到更新,这是一个问题。

假设我有一个 map View Controller 。当我在 viewDidLoad 中询问状态时它更新我的位置的方法,即func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!)被称为。

现在我添加了一个介绍 View Controller ,一旦用户完成介绍,他/她就会转到旧 map Controller 。但是现在func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!)不再被调用!

我注意到,如果我转到设置并为我的应用程序手动切换授权状态,然后返回到我的应用程序 didUpdateLocations被称为。

class MapViewController: UIViewController, CLLocationManagerDelegate {

private let locationManager = CLLocationManager()

override func viewDidLoad() {
super.viewDidLoad()

locationManager.distanceFilter = 100
locationManager.delegate = self
// >=iOS8
if (locationManager.respondsToSelector(Selector("requestWhenInUseAuthorization"))) {
locationManager.requestWhenInUseAuthorization()
} else {
locationManager.startUpdatingLocation()
}
}

// MARK: - CLLocationManagerDelegate

func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
if status == .AuthorizedAlways || status == .AuthorizedWhenInUse {
manager.startUpdatingLocation()
}
}

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
if let location = locations.first as? CLLocation {
println("User's location: \(location.description)")
} else {
println("User's location is unknown")
}
}

}

最佳答案

我发现您发布的内容有几个问题,这里只有两个:

  1. 您正在从 viewDidLoad 调用 locationManager.startUpdatingLocation() 这只会在 View 尚未加载到内存中时触发。建议将它移到 viewWillAppear 中,这样它每次都会触发。
  2. 应该重写这段代码:

        if (locationManager.respondsToSelector(Selector("requestWhenInUseAuthorization"))) {
    locationManager.requestWhenInUseAuthorization()
    } else {
    locationManager.startUpdatingLocation()
    }

您需要检查 authorizationStatus,如果它是 kCLAuthorizationStatusNotDetermined,则使用上面的 if 语句请求权限。如果您不这样做,iOS 8 用户将始终进入 requestWhenInUseAuthorization 部分。您不希望这样,因为操作系统只会请求一次许可。它不会再次询问,除非您将手机的“位置隐私”置于“设置”下。

关于swift - CLAuthorizationStatus AuthorizedWhenInUse 仅在第一次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30270490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com