Filtrar / orderar la respuesta de MKLocalSearch

Estoy usando MKLocalSearch para realizar una búsqueda de maps. Mi problema es orderar los MKMapItems en la respuesta. Por ejemplo, una búsqueda de la ciudad en la que estoy actualmente devolvería primero una serie de negocios relacionados con el nombre de la ciudad y tendría que desplazarme hacia abajo para encontrar la ciudad real. Estoy usando la propiedad de region de MKLocalSearchRequest para enfocar la búsqueda en el área cercana.

Mis preguntas son:

  1. ¿Puedes realizar el order en que te devuelven las respuestas? Por ejemplo, la aplicación Maps mostrará mi ciudad en la parte superior después de haber ingresado la primera letra. ¿Cómo es que no hay POI: s o empresas en la list?
  2. ¿Existe una forma de eliminar completamente las empresas de la búsqueda y solo get direcciones en respuesta?

No estoy seguro si es relevante o no, pero aquí está el código de la búsqueda:

 -(void)issueLocalSearchLookup:(NSString *)searchString { MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.location.coordinate, 30000, 30000); self.localSearchRequest = [[MKLocalSearchRequest alloc] init]; self.localSearchRequest.region = region; self.localSearchRequest.naturalLanguageQuery = searchString; self.localSearch = [[MKLocalSearch alloc] initWithRequest:self.localSearchRequest]; [self.localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) { if(error){ NSLog(@"LocalSearch failed with error: %@", error); return; } else { for(MKMapItem *mapItem in response.mapItems){ [self.data addObject:mapItem]; } [self.searchDisplayController.searchResultsTableView reloadData]; } }]; } 

MKLocalSearchRequest solo acepta naturalLanguageQuery y la región como parameters, por lo que puede "realizar una búsqueda que solo devuelva direcciones?" – No.

Sin embargo, es muy fácil filtrar la list después de que la request haya finalizado. Si desea filtrar las empresas de la list, un simple NSPnetworkingicate hace el trabajo.

 NSPnetworkingicate *noBusiness = [NSPnetworkingicate pnetworkingicateWithFormat:@"business.uID == 0"]; NSMutableArray *itemsWithoutBusinesses = [response.mapItems mutableCopy]; [itemsWithoutBusinesses filterUsingPnetworkingicate:noBusiness]; 

En lugar de utilizar MKLocalSearch, puede usar CLGeocoder y hacer una consulta de código de geociencia inversa:

 CLGeocoder *geo = [[CLGeocoder alloc] init]; [geo reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { // look at the placemarks and grab the locality out of them to get the city name }];