Я создал MapKit и пытаюсь поиграть с MKLocalSearch. Одна вещь, которую я заметил по сравнению с Apple Maps, это то, что mklocalsearch ограничен 10 результатами. Так как же Apple Maps отображает 15 предложений под строкой поиска?
Ладно, к примеру. Я пытаюсь найти "Барселону". В Apple Maps это будет предложено после написания «barc», и оно останется в списке предложений при вводе barcelona. Теперь в моем собственном представлении «Карта» мне действительно нужно ввести всю Барселону, чтобы получить предложение: Испания, Барселона. По пути я получаю другие предложения, но ничего похожего на Испанию, Барселону и карты Apple.
Любое понимание того, как заставить его работать и почему Apple Maps работают по-другому (укажите 15 результатов против 10 с mklocalseach)
Вот код, вызываемый в TextField Changes:
- (IBAction)searchFieldChanged:(UITextField *)sender {
if(self.locationTextfield.text.length>0)
self.tableView.hidden = NO;
else
self.tableView.hidden = YES;
NSString *query = self.locationTextfield.text;
// Create and initialize a search request object.
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = query;
request.region = self.mapsView.region;//we dont want region-specific search results!
//request.region = MKCoordinateRegionMakeWithDistance(self.mapsView.userLocation.location.coordinate,40000000, 15000000);
// Create and initialize a search object.
MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request];
// Start the search and display the results as annotations on the map.
[search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error)
{
[placeMarks removeAllObjects];
NSLog(@"p-count: %lu", response.mapItems.count);
for (MKMapItem *item in response.mapItems) {
[placeMarks addObject:item.placemark];
self.tempPlacemark = item.placemark;
NSLog(@"placemark: %@", item.placemark);//.location.coordinate.latitude);
}
//if(placemarks.count==0)
// appDelegate.staticPlacemark = nil;
//[self.mapsView removeAnnotations:[self.mapsView annotations]];
//[self.mapsView showAnnotations:placemarks animated:NO];
[self.tableView reloadData];
}];
}