iOS - запрос веб-сервиса после задержки

У меня есть панель поиска с предложениями UITableView который заполняется (используя службы JSON) в качестве пользовательских типов. Эти сервисные вызовы должны быть сделаны после задержки 500 мс времени отсутствия набора. Если пользователь начинает вводить в этот период 500 мс, текущий вызов в очереди должен быть отменен, и приложение должно ждать еще 500 мс бездействия, прежде чем сделать еще один afterDelay вызов. Я знаю, что должен использовать performSelector:withObject:afterDelay во всей этой ситуации, но я не могу обойтись с надлежащими условиями. Я пытался использовать кучу bools, но он просто пачкается... Любая помощь?

2 ответа

Решение

Я бы использовал NSTimer вместо performSelector:withObject:afterDelay:, Определить, когда текст изменяется в UISearchBar и сбросьте таймер.

-(void)viewDidLoad {

    search.delegate = self;

}

-(void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {

    [timer invalidate];

    timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(callTheService) userInfo:nil repeats:NO];

}

Как насчет этого, предполагая, что вы обнаруживаете ввод в UITextFieldDelegate метод:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(sendNetworkRequest) object:nil];
    [self performSelector:@selector(sendNetworkRequest) withObject:nil afterDelay:0.5];
    return YES;
}

- (void)sendNetworkRequest
{
    // Here immediately send the request
}

Мне нравится это приближение к таким проблемам, так как это означает, что мне не нужно использовать NSTimer или отслеживать любое состояние, жду ли я, чтобы увидеть, введен ли еще текст или нет. Надеюсь это поможет! Дайте знать, если у вас появятся вопросы.

РЕДАКТИРОВАТЬ: увидел, что вы используете панель поиска вместо. Принцип тот же, просто отмените / выполните сопряжение в соответствующем UISearchBarDelegate метод.

Другие вопросы по тегам