2010-11-18 6 views
1

У меня есть NSSearchField, метод действия которого выполняет весь поиск, анализируя аргумент отправителя (строка).Как не замораживать NSSearchField?

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

Есть ли другой способ сохранить мой NSSearchField от замерзания?

BTW: Я думаю, нет, потому что поле Seach даже Developoer ДОКУМЕНТАЦИЯ в замораживает все время :)

ответ

0

Разве вы не можете использовать setSendsWholeSearchString:, чтобы остановить его искать, как буквы набираются?

2

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

+0

Не нужно понижать уровень до уровня ниже NSOperation/NSOperationQueue. Однако не забудьте обновить свой пользовательский интерфейс (с результатами поиска) в основном потоке. Если у вас много обновлений пользовательского интерфейса, * это * может блокировать основной поток и блокировать пользовательский интерфейс, поэтому попробуйте объединить обновления результатов поиска (а не обновлять каждый раз, когда приходит один результат). –

-1

Установите NSTimer каждый раз, когда пользователь что-то набирает. Если установлен уже установленный таймер, недействительный или перенести его.

Таким образом, вы получаете запрос на обновление поиска каждые N секунд, как бы быстро он ни находился.

 Смежные вопросы

  • Нет связанных вопросов^_^