调用 requestLocation() 时的“线程 1:信号 Sigabrt”
Posted
技术标签:
【中文标题】调用 requestLocation() 时的“线程 1:信号 Sigabrt”【英文标题】:"Thread 1: signal Sigabrt" when calling requestLocation() 【发布时间】:2019-05-14 04:50:54 【问题描述】:尝试使用CLlocationManager().requestLocation()
获取用户的当前位置。但是应用程序崩溃并显示信号 Sigabrt。我知道这可能是因为未连接的插座,所以我确保它们都已连接但编译器仍然会弹出此警告。我已经正确实施
顺便说一下 p.list 中的键。
有趣的是,当我将 requestLocation()
更改为 startUpdatingLocation()
时,一切正常。
let locationManager = CLLocationManager()
override func viewDidLoad()
super.viewDidLoad()
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestLocation()
我希望有人能告诉我我做错了什么,或者我应该将 requestLocation() 替换为 startUpdatingLocation()。
【问题讨论】:
【参考方案1】:Apple 在documentation 中声明,如果您希望使用requestLocation()
,则必须实现这些委托方法:
locationManager(_:didUpdateLocations:)
和 locationManager(_:didFailWithError:)
。
下面的代码对我有用。
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate
let locationManager = CLLocationManager()
override func viewDidLoad()
super.viewDidLoad()
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestLocation()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
print("LOCATIONS: \(locations)")
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
print("ERROR: \(error)")
【讨论】:
以上是关于调用 requestLocation() 时的“线程 1:信号 Sigabrt”的主要内容,如果未能解决你的问题,请参考以下文章
requestLocation() 不请求许可,即使“下次询问”被勾选
requestLocation() 无法提供有关手表硬件的课程,但在 Sim 中工作
CoreLocation CLLocationManager requestLocation 需要 10 秒才能得到回调