我有一系列地点
NSArray *locations = [[NSArray alloc]initWithObjects:loc1, loc2, loc3, loc4, loc5, loc6, loc7, loc8, loc9, nil];
我遍历数组并将当前位置的不同距离存储到另一个数组中的loc1,loc2等,然后从最近到最远的位置对它们进行排序。这就像一个魅力。
但是,我需要将距离与位置名称相关联。例如:如果loc5是最近的地方,那应该在列表的顶部。我知道不同地点的名字,我只需要以某种方式联系它们。
有什么建议吗?
编辑:
考虑到你的建议,我认为我可以这样做:
我有一个包含所有存储距离的数组,让我们调用数组a。
NSMutableDictionary *dic = [[NSMutableDictionary alloc]initWithObjects:locations forKeys:a];
NSArray *sortedArray = [a sortedArrayUsingSelector:@selector(compare:)];
for(int i = 0; i <[sortedArray count]; i++){
CLLocation *loc = [dic valueForKey:[sortedArray objectAtIndex:i]];
NSLog(@"Lat: %f , Lng: %f" , loc.coordinate.latitude , loc.coordinate.longitude);
}
这样我将得到不同距离的纬度和经度,我可以根据我当地存储的坐标进行检查。然而,这给了我一个错误说:
- [NSCFNumber length]:无法识别的选择器发送到实例0x1891f0 * 因未捕获的异常而终止应用 'NSInvalidArgumentException',原因:' - [NSCFNumber length]: 无法识别的选择器发送到实例0x1891f0'
它指向了我的行
CLLocation *loc = [dic valueForKey:[sortedArray objectAtIndex:i]];
线程1:编程接收信号:“SIGABRT”。
知道如何解决这个问题吗?
答案 0 :(得分:0)
我会创建一个信息持有者对象,其中包含您不同位置的所有数据(名称,位置,最后计算的距离等),将所有这些对象放入NSMutableArray
,然后使用{对其进行排序sortUsingSelector:
上的{1}}或sortUsingComparator:
方法。
前者需要您在信息持有者上定义一个返回NSMutableArray
的选择器,而后者(IIRC)允许您定义一个执行相同操作的块。
答案 1 :(得分:0)
您理论上也可以将名称存储为NSDictionary
的键,并将CLLocation
s作为值,然后使用keysSortedByValueUsingComparator:
方法使用一个块来确定距离在CLLocations
和您的参考位置。
这将不再需要明确的信息持有者,但是您可能需要计算大量的处理器时间,因为您需要计算距参考位置的距离以及每次运行时的两个CLLocation
s NSComparator
阻止。
答案 2 :(得分:0)
首先实现这些代理 - (假设您已经包含coreLocation
框架并注册了位置更新。
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
// Handle location updates
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
// Handle error
}
可以通过调用结束位置的CLLocation
方法并将起始位置作为参数进行计算来计算两个distanceFromLocation:
点之间的距离。例如,以下代码计算newLocation和oldLocation指定的点之间的距离:
CLLocationDistance distance = [newLocation distanceFromLocation:oldLocation];