我正在使用TableView,该控制器从Web Feed下载数据,解析并填充此TableView中的内容。 Feed只提供10个项目的数据块。因此,例如,当有112个项目可能需要大约12个服务器请求时加载数据。我想在没有阻止用户屏幕的情况下发出这些请求,它应该按顺序加载数据,就像它不能加载第5页上的项目,除非它已经获取了前一个(1,2,3,4按照这个确切的顺序)例子)。
关于如何实现这个的任何想法?
请事先提供帮助,
的Stephane
答案 0 :(得分:5)
使您的网络电话异步。不要在主UI线程上进行Web调用......
例如,如果您使用ASIHttp library进行http调用(这是建立在Apple的NSURLConnection之上),那么制作异步请求就像 -
一样简单NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
当获取数据时,将调用这些选择器回调 -
- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text data
NSString *responseString = [request responseString];
// Use when fetching binary data
NSData *responseData = [request responseData];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}
这肯定会让你的UI响应......
另请注意,仅在主线程上更新UI元素。从后台线程开始更新ui元素很容易。所以请记住......
答案 1 :(得分:1)
您不需要使用其他API,也可以使用Apple自己的NSURLConnection
。它可以同步或异步检索数据。当然后者在你的情况下是必要的。您将数据保存在请求的委托方法中。
– connection:didReceiveResponse:
– connection:didReceiveData:
– connection:didFailWithError:
– connectionDidFinishLoading:
另外,请参阅我最近对this question的更完整答案。