2 つの場所 (現在の場所、および最初の for ループで指定された座標) 間の距離に応じて NSMutableArray を並べ替えようとしています。ただし、並べ替えは特定の順序を返すのではなく、完全にランダムな順序を返します (ここの写真を参照してください: http://u.maxk.me/iz7Z )。
どこが間違っているのか教えてください。
並べ替え:
[self.venues sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [[obj1 objectForKey:@"distance"] compare:[obj2 objectForKey:@"distance"]];
}];
-setVenues:
- (void) setVenues:(NSMutableArray *)_venues {
if (venues != _venues) {
[venues release];
...
NSMutableArray *updatedVenues = [NSMutableArray array];
for (NSDictionary *venue in _venues) {
...
if (address != nil && city != nil) {
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake([[_location objectForKey:@"lat"] floatValue], [[_location objectForKey:@"lng"] floatValue]);
CLLocation *currentLoc = [[CLLocation alloc] initWithLatitude:self.currentLocation.latitude longitude:self.currentLocation.longitude];
CLLocation *venueLoc = [[CLLocation alloc] initWithLatitude:coord.latitude longitude:coord.longitude];
CLLocationDistance distance = [venueLoc distanceFromLocation:currentLoc];
float miles = distance / 1000;
miles *= 0.621371192; // metres to miles
NSMutableDictionary *newLocation = [NSMutableDictionary dictionaryWithDictionary:_location];
[newLocation removeObjectForKey:@"distance"];
[newLocation setObject:[NSNumber numberWithFloat:miles] forKey:@"distance"];
_location = [NSDictionary dictionaryWithDictionary:newLocation];
...
NSMutableDictionary *newVenue = [NSMutableDictionary dictionaryWithDictionary:venue];
[newVenue removeObjectForKey:@"location"];
[newVenue setObject:_location forKey:@"location"];
[updatedVenues addObject:newVenue];
}
}
venues = [updatedVenues retain];
}
}