我使用以下代碼成功地創建了ASIFormDataRequest。推遲,取消或替換NSOperationQueue中的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
}
但是,如果用戶繼續鍵入,我沒有設法解決如何取消該請求或不放入隊列請求,或空ŧ他排隊並用新請求替換它。
最後,顯然我可以強制用戶等待,直到他們按下了彈出式鍵盤上的「搜索」按鈕,但我希望能夠提供沒有該搜索結果的搜索結果。
感謝
等一下......我已無法通過完全想到這一點?也許我只是簡單地重寫代碼,直到打字停止後才發出請求。嗯......所以我真正需要的是一個等待一秒鐘的線程,但每次重新按鍵時都重置自己! – 2011-04-21 13:06:18
雖然我現在正在考慮使用NSTimer,但我仍然爲此苦苦掙扎。有什麼建議? – 2011-04-21 15:14:16