Я успешно делаю ASIFormDataRequest с использованием приведенного ниже кода.
//get groups
if (![self queue]) {
[self setQueue:[[[NSOperationQueue alloc] init] autorelease]];
}
//make the url by appending the URL from the Constant class to the jsp name
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", URL, @"connectors/searchGroupsServlet.jsp"]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request addRequestHeader:@"User-Agent" value:USER_AGENT];
[request addPostValue:[login username] forKey:@"username"];
[request addPostValue:[login password] forKey:@"password"];
[request addPostValue:[searchText lowercaseString] forKey:@"query"];
[request addPostValue:GROUP_FILTER_LIMIT forKey:@"limit"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestDone:)];
[request setDidFailSelector:@selector(requestWentWrong:)];
Этот запрос в настоящее время выполняется при каждом нажатии клавиши в окне поиска (набранный текст отправляется в запросе какстрока поиска).Однако вместо того, чтобы отправлять запрос при каждом нажатии клавиши, я хочу отложить запрос на секунду, чтобы пользователи могли вводить дополнительные символы в поле поиска до отправки запроса.
Я успешно создал потокэто ждет секунду, пока пользователи продолжают печатать (хотя, по общему признанию, я не уверен, что это лучший способ сделать это, но сейчас это работает) ...
this
[self performSelectorInBackground:@selector(wait:) withObject:request];
вызывает это
-(void)wait:(NSString *)request
{
[NSThread sleepForTimeInterval:1.00];
[[self queue] addOperation:request]; //queue is an NSOperationQueue
}
, но если пользователь продолжает печатать, мне не удалось решить, как отменить запрос или не помещать запрос в очередь, или очистить очередь и заменить ее нановый запрос.
Наконец, очевидно, я мог заставить пользователей ждать, пока они не нажмут кнопку «поиск» на всплывающей клавиатуре, но я надеялся предоставить результаты поиска без этого.
Спасибо