Задержка разбора UISearchbar - PullRequest
       20

Задержка разбора UISearchbar

4 голосов
/ 31 января 2011

У меня есть UISearchbar в моем приложении.Это динамический поиск, и, когда пользователь вводит текст, поиск в удаленной базе данных осуществляется через удаленный вызов API (я думаю, что это происходит через REST).

Представление таблицы обновляется динамически по мере ввода пользователем.Я использую NSXMLParser для анализа результатов XML.(так 3 метода делегата; didStartElement, didEndElement)

В некоторых случаях в результатах отображаются повторяющиеся записи, например, если пользователь набрал YAH, он показывает YAHOO 3-4 раза.Я не уверен, почему.

Как я могу уменьшить количество раз, когда выполняется анализ или как отложить анализ, чтобы он не делал запрос для каждого символа, введенного / удаленного пользователем,

Это, я полагаю, может решить проблему.

Ответы [ 2 ]

10 голосов
/ 31 января 2011

Одна вещь, которую вы можете сделать, это ввести задержку перед отправкой удаленного вызова API вместо отправки одного запроса для каждого символа.

// Whenever UISearchbar text changes, schedule a lookup
- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)text {
        // cancel any scheduled lookup
        [NSObject cancelPreviousPerformRequestsWithTarget:self];
        // start a new one in 0.3 seconds
        [self performSelector:@selector(doRemoteQuery) withObject:nil afterDelay:0.3];
}
0 голосов
/ 31 января 2011

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

NSMutableArray *mutableResults = [[myResults mutableCopy] autorelease];
NSMutableSet *duplicates = [NSMutableSet set];
NSMutableIndexSet *indexesToRemove = [NSMutableIndexSet indexSet];

for (NSString *result in mutableResults)
{
    if (![duplicates containsObject:result])
        [duplicates addObject:result];
    else 
        [indexesToRemove addIndex:[mutableResults indexOfObject:object]];
}

[mutableResults removeObjectsAtIndexes:duplicates];
return mutableResults;
...