【问题标题】:Getting uncaught exception of type NSException with CLLocationCoordinate2D initialization使用 CLLocationCoordinate2D 初始化获取 NSException 类型的未捕获异常
【发布时间】: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 是异步的。您的代码没有考虑到这一点。

标签: swift xcode core-location


【解决方案1】:

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

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

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

【讨论】:

  • 尝试从命令行运行它,虽然它已成功编译,但似乎无法解开地标(我认为它没有检索任何数据)。我的输入是“亚特兰大”和“芝加哥”。我也尝试使用更具体的地址,但同样的事情发生了。
猜你喜欢
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多