使用 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 exception
或 SIGABRT
类型的原因。
例如,如果我将按钮定位为:
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 多边形中?