Добавьте NSTimer в качестве свойства для вашего поискового делегата.
В mustReloadTableForSearchString: (NSString *) метод делегата searchString вместо прямой отправки запроса вместо этого проверьте, есть ли у вас уже таймер, если это так, отмените его, а затем запустите новый таймер.
В целевом методе таймера начните поиск.
Это будет означать, что пока они будут печатать, вы продолжите воссоздавать таймер. Когда они прекратят печатать, последнее воплощение таймера сработает через n секунд. Тогда вам просто нужно также добавить ручной запуск поиска, когда они нажимают кнопку. (Вы также можете добавить логическое значение, чтобы проверить, был ли поиск уже начат).
т.е. в интерфейсе ваших делегатов
NSTimer *searchTimer;
@property (nonatomic, retain) NSTimer *searchTimer;
Затем в вашей реализации shouldReloadTableForSearchString вместо запуска веб-запроса сделайте следующее:
if (self.searchTimer) {
[self.searchTimer invalidate];
self.searchTimer = nil;
}
self.searchTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(searchTimerPopped:) userInfo:nil repeats:FALSE];
Тогда в вашей цели таймера
-(void) searchTimerPopped:(NSTimer *)sTimer {
// code to fire off the asynchronous web call to do the search
}