Como classificar um NSArray de NSDictionaries por distância

Suponha que você tenha um TableView preenchido com as informações de um NSArray (self.shopsArray). Cada posição na matriz tem um NSDictionary com as informações de uma loja (recuperado de uma API REST, arquivo Plist, qualquer que seja):

{
id
= 1;
latitude
= "-25.0007";
longitude
= "-23.5678";
name
= "An awesome shop";
}

Então você pode classificá-lo de uma maneira agradável usando um Comparador:

- (void)sortTableWithCurrentLocation:(CLLocation *)currentLocation
{
self.shopsArray = [self.shopsArray sortedArrayUsingComparator: ^(id a, id b)
{
CLLocation *shopLocationA = [[CLLocation alloc] initWithLatitude:[[a objectForKey:@"latitude"] doubleValue] longitude:[[a objectForKey:@"longitude"] doubleValue]];
CLLocation *shopLocationB = [[CLLocation alloc] initWithLatitude:[[b objectForKey:@"latitude"] doubleValue] longitude:[[b objectForKey:@"longitude"] doubleValue]];

CLLocationDistance distA = [shopLocationA distanceFromLocation:currentLocation];
CLLocationDistance distB = [shopLocationB distanceFromLocation:currentLocation];

if (distA < distB) {
return (NSComparisonResult)NSOrderedAscending;
} else if ( distA > distB) {
return (NSComparisonResult)NSOrderedDescending;
} else {
return (NSComparisonResult)NSOrderedSame;
}
}];

[self.tableView reloadData];
}