位置管理器没有在 swift ios10 中更新
Posted
技术标签:
【中文标题】位置管理器没有在 swift ios10 中更新【英文标题】:location manager not updating in swift ios10 【发布时间】:2016-10-25 05:59:55 【问题描述】:我是 swift 新手,正在尝试获得一个显示经度和纬度的基本程序。
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate
@IBOutlet weak var latLabel: UILabel!
@IBOutlet weak var longLabel: UILabel!
@IBOutlet weak var addLabel: UILabel!
var lm = CLLocationManager()
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
lm = CLLocationManager()
@IBAction func getCurrentLocation(_ sender: AnyObject)
lm.delegate = self
lm.desiredAccuracy = kCLLocationAccuracyBest
lm.startUpdatingLocation()
print("loc")
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
print ("error")
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
print ("location")
let length = locations.count
let curLoc = locations[length-0]
latLabel.text = String(curLoc.coordinate.latitude)
print ("loccation")
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
【问题讨论】:
【参考方案1】:你错过了两件事。
-
您必须使用 requestAlwaysAuthorization 或 requestWhenInUseAuthorization() 请求许可。
因此,当您在 viewdidlod 中分配位置管理器时,请这样做
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
-
您需要按照@Anbu.Karthik 在他的回答中的建议添加信息。
将 NSLocationAlwaysUsageDescription 用于想要使用 即使应用未打开且未使用,设备的位置也是如此。
将 NSLocationWhenInUseUsageDescription 用于想要使用 仅当应用打开和使用时设备的位置。
【讨论】:
【参考方案2】:检查一次您是否在您的 plist 中添加了以下信息
Location :
Key : Privacy - Location Always Usage Description
Value : $(PRODUCT_NAME) location use
Key : Privacy - Location When In Use Usage Description
Value : $(PRODUCT_NAME) location use
欲了解更多信息,请参阅this
【讨论】:
【参考方案3】:我发现的另一个问题导致不调用位置更新回调,没有给出明显的错误消息是它不能是私有函数(当然,一旦你最终注意到它就很明显......) .我意识到 OP 不是,但如果您遇到问题,这是一个常见的地方,所以它可能会帮助某人。
因此,如果不给出任何明显的错误指示,如应用程序崩溃等,以下将导致函数无法被调用:
private func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
print ("location")
let length = locations.count
let curLoc = locations[length-0]
latLabel.text = String(curLoc.coordinate.latitude)
print ("loccation")
删除 'private' 关键字,就像在 OP 的代码中一样,将允许调用它。
【讨论】:
以上是关于位置管理器没有在 swift ios10 中更新的主要内容,如果未能解决你的问题,请参考以下文章