我使用下面的代码成功地制作了 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:)];
当前,用户在搜索框中的每次按键都会发出此请求(键入的文本在请求中作为搜索字符串发送)。但是,我不想在每次按键时都发送请求,而是希望将请求延迟一秒钟,以允许用户在发送请求之前在搜索框中输入更多字符。
我已经成功创建了一个线程,在用户继续输入时等待一秒钟(尽管我承认我不相信这是最好的方法,但它现在有效)......
这
[self performSelectorInBackground:@selector(wait:) withObject:request];
称之为
-(void)wait:(NSString *)request
{
[NSThread sleepForTimeInterval:1.00];
[[self queue] addOperation:request]; //queue is an NSOperationQueue
}
但是,如果用户继续输入,我还没有弄清楚如何取消请求或不将请求放入队列,或者清空队列并用新请求替换它。
最后,显然我可以强迫用户等到他们按下弹出键盘上的“搜索”按钮,但我希望在没有这个的情况下提供搜索结果。
谢谢