调用 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 中工作

使用 requestLocation 只请求一次用户的位置

CoreLocation CLLocationManager requestLocation 需要 10 秒才能得到回调

Swift CoreLocation

与其他 UIView 边框线重叠时的 UIView 边框线粗细