NSComboBox с альтернативными способами записи

Я пытаюсь реализовать функцию автозаполнения в небольшом приложении. Я хочу дать пользователю возможность записать город (из длинного списка городов) в NSComboBox. Это прекрасно работает, пока пользователь использует точное написание города внутри моего массива названий городов. Но если они по какой-либо причине используют другое написание, это не удается, и город не найден.

Таким образом, если пользователь ищет, например, «Köln», это не проблема, но если он ищет «Cologne», он не сможет его найти.

Для этого у меня есть для каждого города дополнительный массив альтернативных написаний.

Теперь мне бы хотелось, чтобы NSComboBox (или любой другой тип TextField) смотрел не только в «city.name», но и в массиве «city.alternativeNames». Отображаемое значение также должно представлять то, что пишет пользователь.

Я не хочу создавать запись в списке всплывающей части NSComboBox для каждого альтернативного имени, так как это сделает список еще длиннее, чем он есть, и запутает людей (только одеколон имеет 85 различных вариантов написания).

Спасибо за ваши предложения, я совершенно новичок в NSComboBox.


person Holger    schedule 28.05.2017    source источник


Ответы (1)


Интересная проблема. Я думаю, что, возможно, вам нужно выбрать другой способ структурирования данных, чтобы упростить его.

Рассмотрим метод поиска (сопоставление строки). Структурирование ваших данных для этого случая должно учитывать предпочтительное написание каждого города (предпочитаемое вами для прокручиваемого списка).

Как насчет плоского массива городов (чтобы обеспечить простой поиск на основе правописания пользователя без необходимости также проверять каждый возможный массив альтернатив и управлять их правильной сортировкой), но каждый из них имеет необязательный (может быть нулевым) указатель «предпочтительного правописания» на "правильный" один. При отображении параметров в поле со списком отображать массив, отфильтрованный по тем, у кого нет необязательных предпочтительных написаний, плюс частичное/полное завершение альтернативного написания, введенное в данный момент?

Таким образом, City имеет свойство name и необязательное свойство preferred. В вашем случае, если Cologne предпочтительнее, экземпляр Köln будет иметь Cologne как предпочтительный. Кёльн появится в списке только в том случае, если пользователь введет его (даже частично), и он автоматически окажется в правильной позиции альфа-сортировки (при условии, что ваши города отсортированы).

Имеет ли это смысл или мне нужно перефразировать? Утром не хватило кофе. :-)

person Joshua Nozzi    schedule 28.05.2017