gpt4 book ai didi

iPhone; uisearchbar 异步请求,在发送新请求之前取消

转载 作者:行者123 更新时间:2023-12-03 20:57:03 24 4
gpt4 key购买 nike

大家好我希望在我的应用程序中添加一个搜索栏,用户可以在其中搜索城市和国家/地区 - 结果来自在线 API。

因此,当用户开始输入四个以上字符时,系统会向在线 API 发送搜索请求,并获取国家/地区、城市信息。这里的问题是;当用户键入时,会进行调用,但之前的任何调用尚未结束 - 导致应用程序感觉缓慢......

重申

  1. 用户输入,比如说“唱歌”
  2. 发送请求,并检索其中包含 Sing 的所有城市
  3. 但即使在检索列表之前,用户也会继续输入“Singa”
  4. 应用程序会等待第一个请求的结果,甚至有时,结果是一些垃圾。

我希望你们明白我的意思,我只需要取消任何待处理的请求并发送一个新的请求。我怎样才能实现这个目标?

一种方法是仅在用户单击“搜索”时检索列表 - 但我希望它更具交互性。

谢谢

最佳答案

我在这个问题上取得了一些积极的进展......正如 rog 提到的,使用 NSURLCOnnection 在发送新请求之前实现了取消。我的代码如下

- (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&client_password=f@c3$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

如果您发现当我在搜索栏中输入字符时请求被取消。

关于iPhone; uisearchbar 异步请求,在发送新请求之前取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4295567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com