gpt4 book ai didi

ios - Swift:位置权限弹出窗口不断关闭

转载 作者:行者123 更新时间:2023-11-28 08:33:57 25 4
gpt4 key购买 nike

尝试在 Swift 中获取用户的经度和纬度时,我遇到了一个问题。我有一个按钮,它运行一个函数来获取用户的坐标,第一次按下它时,它应该请求允许为应用程序提供您的位置。但是,我遇到的问题是这个弹出窗口会在我按下获取位置按钮后立即自动关闭。

这是发生了什么:http://imgur.com/a/0wdnm

这是我的代码:

class location: NSObject, CLLocationManagerDelegate {
var locationManager = CLLocationManager()

internal func getLocation() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest

if CLLocationManager.authorizationStatus() == .AuthorizedAlways {
locationManager.startUpdatingLocation()
} else if CLLocationManager.authorizationStatus() == .NotDetermined {
locationManager.requestAlwaysAuthorization()
} else if CLLocationManager.authorizationStatus() == .Denied {
print("User denied location permissions.")
}
}


// MARK : CLLocationManagerDelegate protocol
@objc
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location: CLLocationCoordinate2D = (locationManager.location?.coordinate)!
print(location.latitude)
print(location.longitude)
}
}

最佳答案

这是一些适合我的代码。一些注意事项:

  1. 仅在您实际需要使用时才创建CLLocationManager。如果用户没有启用 CoreLocation,那么他们将在创建位置管理器时收到警报,这可能是您的应用程序启动时(这可能是您想要的,也可能不是您想要的)。
  2. requestAlwaysAuthorization 需要 Info.plist 中的 [NSLocationAlwaysUsageDescription][1] 条目。
  3. 观察 locationManager:didChangeAuthorizationStatus: 并在服务变得不可用时停止位置管理器。

代码:

import UIKit
import CoreLocation

class LocationViewController: UIViewController, CLLocationManagerDelegate {

var locationManager: CLLocationManager?

internal func getLocation() {

if locationManager == nil {

locationManager = CLLocationManager()
locationManager?.delegate = self
locationManager?.desiredAccuracy = kCLLocationAccuracyBest
}

if CLLocationManager.authorizationStatus() == .AuthorizedAlways {
locationManager?.startUpdatingLocation()
} else if CLLocationManager.authorizationStatus() == .NotDetermined {
locationManager?.requestAlwaysAuthorization()
} else if CLLocationManager.authorizationStatus() == .Denied {
print("User denied location permissions.")
}
}


// MARK : CLLocationManagerDelegate protocol

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {

switch status {

case .AuthorizedAlways, .AuthorizedWhenInUse:
locationManager?.startUpdatingLocation()

default:
locationManager?.stopUpdatingLocation()
}
}

@objc func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

guard let location = locationManager?.location?.coordinate else {
return
}

print(location.latitude)
print(location.longitude)
}
}

extension LocationViewController {

@IBAction internal func buttonTapped(sender: AnyObject) {

getLocation()
}
}

关于ios - Swift:位置权限弹出窗口不断关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38287571/

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