MKLocalSearch не работает как поиск Apple Maps?

Я создал 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];
 }];

}

person DevilInDisguise    schedule 16.11.2015    source источник
comment
Таким образом, приложение «Карты» может использовать закрытый API, который вы не можете использовать. Вас это удивляет? Это похоже на скользящие ячейки списка сообщений в приложении «Почта» — Apple делает то, что они обычно не добавляют в Cocoa Touch. Это раздражает, но это не редкость.   -  person matt    schedule 16.11.2015
comment
Ну, я немного удивлен, что невозможно получить разумные результаты, скажем, из моего примера. Мне не нравится, что я должен использовать Google API, а также с тех пор, как ios6 (я думаю?) Яблоко заявило, что Google больше не нужен.   -  person DevilInDisguise    schedule 17.11.2015
comment
@DevilInDisguise, есть предложения? у меня такая же проблема   -  person dev.nikolaz    schedule 13.10.2016


Ответы (1)


Что вы делаете, так это MKLocalSearch с использованием MKLocalSearchRequest. Apple в своих картографических приложениях для macOS и iOS использует новый класс MKLocalSearchCompleter для получения предложений автозаполнения. Эти предложения используются для поиска в реальном времени и отображаются в UITableView. Когда пользователь выбирает одну запись, это предложение используется для инициализации MKLocalSearchRequest для получения подробной информации об этом местоположении.

person blackjacx    schedule 17.10.2017