我有一个名为alertMap
的插座(MKMapView),在我的viewWillAppear
我设置了alertMap
的初始视图。
func centerMapOnLocation(_ location: CLLocation) -> Bool {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, regionRadius * 1.0, regionRadius * 1.0)
alertMap.setRegion(coordinateRegion, animated: true) // TODO: crash
return true
}
有时在我的代码中(我不知道为什么,但这又是另一个问题...)我的位置坐标存储在我的API中,导致上面的函数崩溃。
我尝试了几种方法来“捕获”异常,但似乎不可能。
如何捕获此运行时错误。
错误读取:
2017-02-28 12:54:33.400319 myApp[10433:2647466] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid Region <center:+1197269.18497000, -7972692.46846000 span:+0.00895306, -0.62941112>'
*** First throw call stack:
(0x1869091b8 0x18534055c 0x186908e80 0x192bffa0c 0x1000bd77c 0x1000bc728 0x1000bd4c0 0x18c7d6754 0x18c7d64cc 0x18cb0cf04 0x18ca4ffdc 0x18ca41d50 0x18c7b10b4 0x1868b60c0 0x1868b3cf0 0x1868b4180 0x1867e22b8 0x188296198 0x18c8297fc 0x18c824534 0x100130530 0x1857c55b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
答案 0 :(得分:3)
正如几位不同的人所指出的那样:
您需要做的是使用保护块验证数据,然后追溯到根源会导致您的问题,例如:
func centerMapOnLocation(_ location: CLLocation) -> Bool {
guard (-90.0 ... 90.0).contains(location.coordinate.latitude) else {
print("Unexpected latitude value \(location.coordinate.latitude)")
return false
}
guard (-180.0 ... 180.0).contains(location.coordinate.longitude) else {
print("Unexpected longitude value \(location.coordinate.longitude)")
return false
}
guard (0 ..< 10000.0).contains(regionRadius) else {
print("Unexpected region radius \(regionRadius)")
return false
}
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, regionRadius * 1.0, regionRadius * 1.0)
alertMap.setRegion(coordinateRegion, animated: true) // TODO: crash
return true
}