Лучший способ реализовать поиск в реальном времени (поиск по мере ввода)? - PullRequest
0 голосов
/ 19 ноября 2009

Я пытаюсь улучшить поиск контактов (поиск по мере ввода) в моем приложении для iPhone. После того, как я проверил некоторые реальные тесты устройств, моя текущая (не поточная) реализация слишком медленная. Насколько я знаю, для iPhone нет API прожектора. Поэтому я думаю, что решение должно быть пронизано так, чтобы оно обновляло результаты каждые x секунд вместо каждого нажатия клавиши. Существуют ли какие-либо реализации с открытым исходным кодом, на которые я мог бы опираться?

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

Насколько я знаю, для iPhone нет API прожектора.

Тебе он не нужен. Вот один из способов сделать это:

  1. Поместите свои контакты в постоянное хранилище Core Data
  2. Используйте NSFetchedResultsController для управления набором результатов
  3. Используйте UISearchDisplayController, чтобы применить NSPredicate к набору результатов в реальном времени

Единственный поток, который, как я вижу, вам может понадобиться, - это отдельный поток, чтобы заполнить хранилище основных данных контактами.

Если у вас есть набор результатов с помощью NSFetchedResultsController, очень легко применить предикат. Например:

if ([self.searchBar.text length]) {
    _predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(myContactName contains[cd] '%@')", self.searchBar.text]];
    [self.fetchedResultsController.fetchRequest setPredicate:_predicate];
}

NSError *error;
if (![self.fetchedResultsController performFetch:&error]) {
    // handle error...
}
NSLog(@"filtered results: %@", [self.fetchedResultsController fetchedObjects]);

отфильтрует набор результатов [self.fetchedResultsController fetchedObjects] на лету.

0 голосов
/ 19 ноября 2009

Как медленно? Кажется, что могут быть более простые оптимизации (кроме потоков) для вашей функции поиска и обновления, особенно если вы просто ищете контакты. Если у вас нет тысяч контактов, я не могу представить, чтобы это было особенно медленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...