我对此问题取得了一些积极进展...... 使用NSURLCOnnection,因为提到了rog,在发送新请求之前实现取消。我的代码如下
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if([searchText length]<4) return;
else{
//[tableData removeAllObjects];// remove all data that belongs to previous search
//make the call
url=[NSString stringWithFormat:@"http://xml.customweather.com/xml?client=clinique_test&[email protected]$toF&product=search&search=%@",searchBar.text];
NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0];
NSLog(@"%@",url);
if(connection!=nil){ //cancel if in process
NSLog(@"connection cancelled");
[connection cancel];
}
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
NSLog(@"Making request");
}
}
- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData {
if (data==nil) {
data =
[[NSMutableData alloc] initWithCapacity:2048];
}
[data appendData:incrementalData];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection {
NSString *res=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",res);
[connection release];
connection=nil;
[data release];
data=nil;
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
/* MY custom function goes here*/
}
}
这工作很适合我 - 一个样本控制台输出
2010-11-29 15:46:52.535 searchBar1[2931:207] Making request
2010-11-29 15:46:52.678 searchBar1[2931:207] connection cancelled
2010-11-29 15:46:52.690 searchBar1[2931:207] Making request
2010-11-29 15:46:52.871 searchBar1[2931:207] connection cancelled
2010-11-29 15:46:52.876 searchBar1[2931:207] Making request
2010-11-29 15:46:53.063 searchBar1[2931:207] connection cancelled
2010-11-29 15:46:53.069 searchBar1[2931:207] Making request
2010-11-29 15:46:53.367 searchBar1[2931:207] connection cancelled
2010-11-29 15:46:53.372 searchBar1[2931:207] Making request
2010-11-29 15:46:53.529 searchBar1[2931:207] connection cancelled
2010-11-29 15:46:53.535 searchBar1[2931:207] Making request
2010-11-29 15:46:54.354 searchBar1[2931:207] <?xml version="1.0" encoding="UTF-8"?>
<cw_citylist size="1" search_type="city">
<city id="75281" name="Singapore" state="" state_name="" country="SN" country_name="Singapore" lat="1.28" long="103.84" population="2930200" timezone="8" timezone_code="SGT" timezone_id="Asia/Singapore" localtime="Mon, 29 Nov 2010 15:50:43 SGT" region="Indonesia" weather_id="75281" />
</cw_citylist>
2010-11-29 15:46:54.360 searchBar1[2931:207] Searching for ... city
2010-11-29 15:46:54.364 searchBar1[2931:207] Found in Singapore, Singapore
2010-11-29 15:46:54.368 searchBar1[2931:207] contacts error in num of row
2010-11-29 15:46:54.374 searchBar1[2931:207] Array value is Singapore,Singapore
如果您发现该请求被取消了,因为我输入的字符到搜索栏。
我会想到这一点 - 将尝试实施。我认为这将是一个普遍的问题,并会有一个锅炉板解决方案:) – Veeru 2010-11-28 06:47:19