iOS - место поиска Apple Maps MKMapKit не работает должным образом
Поиск в Apple Maps MKMapKit не работает должным образом с помощью MKLocalSearch.
Я должен предоставить функцию поиска местоположения, где пользователь может вводить данные, а приложение предложит соответствующий результат, а пользователь может выбрать один из них, чтобы отобразить его на виде карты и получить сведения об адресе из местоположения, выбранного из выбранной записи результата.
В настоящее время результаты запроса MKLocalSearch иногда предоставляют код ошибки "loadingThrottled", хотя мы отменяем предыдущий запрос с введенным новым поисковым символом.
Также MKLocalSearch предоставляет только 10 результатов для искомой строки.
Можно ли как-то улучшить эту функцию поиска местоположения и улучшить автозаполнение?
Согласно документам Apple:
Для каждого приложения или идентификатора разработчика нет ограничений по количеству запросов, поэтому у хорошо написанных приложений, которые работают правильно, проблем не должно быть. Однако регулирование может происходить в плохо написанном приложении, которое создает чрезвычайно большое количество запросов. https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/LocationAwarenessPG/EnablingSearch/EnablingSearch.html
1 ответ
Вы должны использовать MKLocalSearchCompleter для получения предложений автозаполнения. Это обеспечивает наиболее релевантные результаты по сравнению с MKLocalSearch.
Объект MKLocalSearchCompleter принимает частичную строку поиска и генерирует список возможных дополнений. Вы используете объект для завершения поиска, чтобы получить предложения по автозаполнению для собственных элементов управления поиском на основе карты.
Преимущество:
- Предоставьте наиболее релевантные результаты по сравнению с MKLocalSearch.
- Фильтр местоположения (MKSearchCompletionFilterType) доступен.
- Меньше шансов получить ошибку "loadingThrottled".
- Приблизительно дает 15 результатов.(Исходя из моего опыта до сих пор.)
Ограничение:
- MKLocalSearchComplete не предоставляет местоположение в ответе, только предоставляет имя местоположения и адрес.(Если вы хотите указать местоположение, чем создавать объект MKLocalSearch, вы получите более подробную информацию о местоположении.)
Когда пользователь вводит текст, вы вводите текущую текстовую строку в объект завершающего поиска, который доставляет возможные завершения строки, которые соответствуют местоположениям или интересующим точкам. Затем вы используете полностью сформированные объекты завершения поиска, чтобы создать объект MKLocalSearch и получить более подробную информацию о географическом местоположении.