使用 CLLocationCoordinate2D 初始化获取 NSException 类型的未捕获异常

Posted

技术标签:

【中文标题】使用 CLLocationCoordinate2D 初始化获取 NSException 类型的未捕获异常【英文标题】:Getting uncaught exception of type NSException with CLLocationCoordinate2D initialization 【发布时间】:2020-05-19 19:32:22 【问题描述】:

我正在尝试使用 CoreLocation 查找两个城市之间的距离,但由于某种原因,在初始化两个 CLLocationCoordinate2D 变量后出现错误。我必须事先初始化它们,因为它们处于闭包中。

这是我的代码:

let geoC = CLGeocoder()

func distance(_ cityA: String, _ cityB: String) -> Double
    var coordinatesA = CLLocationCoordinate2DMake(0.0, 0.0)
    var coordinatesB = CLLocationCoordinate2DMake(0.0, 0.0)
    print("check")
    geoC.geocodeAddressString(cityA, completionHandler: 
        (placemarks, errorA) -> Void in
        if (errorA) != nil
            print("Error", errorA!)
        
        if let placemarkA = placemarks?.first
            coordinatesA = placemarkA.location!.coordinate
        
    )

    geoC.geocodeAddressString(cityA, completionHandler: 
        (placemarks, errorB) -> Void in
        if (errorB) != nil
            print("Error", errorB!)
        
        if let placemarkB = placemarks?.first
            coordinatesB = placemarkB.location!.coordinate
        
    )
    let coordinateA = CLLocation(latitude: coordinatesA.latitude, longitude: coordinatesA.longitude)
    let coordinateB = CLLocation(latitude: coordinatesB.latitude, longitude: coordinatesB.longitude)

    return coordinateA.distance(from:coordinateB)


我得到的错误是:libc++abi.dylib: 以 NSException 类型的未捕获异常终止。

我正在使用 XCode Playground。

【问题讨论】:

geocodeAddressString 是异步的。您的代码没有考虑到这一点。 【参考方案1】:

实际上 Playground 会阻止您查看错误详细信息。当 Swift Playground 无法执行某些操作时,就会导致此类崩溃,在这种情况下,Playground 将无法显示导致 uncaught terminating exceptionSIGABRT 类型的原因。 例如,如果我将按钮定位为:

var button = CGRect(x: 200, y:200, width:30, height: 30)

而我添加它的视图只有50x50,那么它肯定会导致错误。

【讨论】:

尝试从命令行运行它,虽然它已成功编译,但似乎无法解开地标(我认为它没有检索任何数据)。我的输入是“亚特兰大”和“芝加哥”。我也尝试使用更具体的地址,但同样的事情发生了。

以上是关于使用 CLLocationCoordinate2D 初始化获取 NSException 类型的未捕获异常的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftUI 中的扩展将 Hashable 协议添加到 CLLocationCoordinate2D

使用 Swift 将 CLLocationCoordinate2d 转换为街道地址

在 Swift 3 中解析 JSON (CLLocationCoordinate2D)

MKPolygon - 如何确定 CLLocationCoordinate2D 是不是在 CLLocationCoordinate2D 多边形中?

将值数组放入 CLLocationCoordinate2D 的优雅方式

从 CLLocationCoordinate2D 中找到边界框