在地图视图上有一个按钮,用于计算我在地图上绘制的位置的最近位置。我已经应用了一些代码,但是当我点击按钮时,应用程序会因为出现此错误而崩溃,
[__ NSDictionaryI坐标]:无法识别的选择器发送到实例0x174e61b40 2017-10-31 15:20:00.434548 GuardsAutoZone [735:114166] *由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [__ NSDictionaryI坐标]:无法识别的选择器已发送例如0x174e61b40' * 第一次抛出调用堆栈: (0x1937d11b8 0x19220855c 0x1937d8268 0x1937d5270 0x1936ce80c 0x10011cec8 0x1996bbd30 0x1996bbcb0 0x1996a6128 0x1996bb59c 0x1996bb0c4 0x1996b6328 0x199686da0 0x199e7075c 0x199e6a130 0x19377eb5c 0x19377e4a4 0x19377c0a4 0x1936aa2b8 0x19515e198 0x1996f17fc 0x1996ec534 0x1000fc994 0x19268d5b8) libc ++ abi.dylib:以NSException类型的未捕获异常终止 (LLDB)
我的代码是这样,我怀疑我的代码是否适合查找最近的位置?我使用的代码是,
- (IBAction)nearLocation:(id)sender {
CLLocation *userLocation = self.mapView.userLocation.location;
NSMutableDictionary *distances = [NSMutableDictionary dictionary];
for (MapPin *obj in locations) {
CLLocation *loc = [[CLLocation alloc] initWithLatitude:obj.coordinate.latitude longitude:obj.coordinate.longitude];
CLLocationDistance distance = [loc distanceFromLocation:userLocation];
NSLog(@"Distance from Annotations - %f", distance);
[distances setObject:obj forKey:@( distance )];
}
NSArray *sortedKeys = [distances allKeys];
NSLog(@"List %@",sortedKeys);
//NSArray *closestKeys = [sortedKeys subarrayWithRange:NSMakeRange(0, MIN(3, sortedKeys.count))];
// NSArray *closestAnnotations = [distances objectsForKeys:closestKeys notFoundMarker:[NSNull null]];
}
错误屏幕截图是, enter image description here
答案 0 :(得分:0)
使用这组代码获取两个纬度和经度之间的距离。
在目标C
中@class CLLocation
CLLocation *location1 =[[CLLocation alloc] initWithLatitude:[@"23.039698" doubleValue] longitude:[@"77.571663" doubleValue]];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:[@"23.0422" doubleValue] longitude:[@"72.5644" doubleValue]];
CLLocationDistance distanceMeter = [location distanceFromLocation:location2];
在 Swift
中import CoreLocation
let location1 = CLLocation(latitude: 5.0, longitude: 5.0)
let location2 = CLLocation(latitude: 5.0, longitude: 3.0)
let distanceInMeters = location1.distance(from: location2)
上面的代码将以米为单位给出距离。
一旦您通过坐标获得两个注释之间的距离,您就可以根据您的要求实现相同的距离。
答案 1 :(得分:0)
似乎locations
是NSDictionary
的数组。在for
循环中,您将元素转换为MapPin*
,但这只会让编译器感到满意。访问obj.coordinate.latitude
会在对象coordinate
上调用选择器obj
。异常告诉我们它是一个NSDictionary对象。
检查运行时真正的对象locations
,并相应地更改代码。