我要求我的UITableview在从Web服务检索数据后加载数据。检索大量数据时,我的uitableview显示为空。而不是那样,UIActivityIndicator应该出现,直到数据加载到UITableview中。
我正在尝试如下,但无法获得所需的功能。请帮忙。
另外,让我建议,当从webservice返回的数据很大时,将数据加载到UITableview的最佳方法是什么。
提前致谢。
- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
UILabel *lblName = (UILabel *)[cell viewWithTag:1];
[lblName setText:[myArray objectAtIndex:[indexPath row]]];
return cell;
}
- (void)dataLoading
{
myActivityIndicator=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[myActivityIndicator setFrame:CGRectMake(140, 170, 40, 40)];
[self.view addSubview:myActivityIndicator];
[myActivityIndicator startAnimating];
NSString *playersDatalink = [NSString stringWithFormat:@"Webservice link"];
NSURL *JsonPlayersDataURL = [NSURL URLWithString:playersDatalink];
NSString *JsonPlayersData = [[NSString alloc] initWithContentsOfURL:JsonPlayersDataURL];
SBJSON *playersDataParser = [[SBJSON alloc] init];
NSDictionary *PlayersDicdata = (NSDictionary *) [playersDataParser objectWithString:JsonPlayersData error:nil];
NSDictionary *playersdata = (NSDictionary *) [PlayersDicdata objectForKey:@"players"];
NSLog(@"palyersdata is =%@",playersdata);
self.myArray = [NSMutableArray arrayWithCapacity:[playersdata count]];
for (NSDictionary *details in playersdata) {
[self.myArray addObject:[details objectForKey:@"teamid"]];
}
if ([playersdata count]==0) {
UIAlertView *myalert = [[UIAlertView alloc]initWithTitle:@"Webserive error " message:@"No data returned from webservice" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[myalert show];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self performSelector:@selector(dataLoading) withObject:nil afterDelay:0.0];
[myActivityIndicator stopAnimating];
}
答案 0 :(得分:1)
hi下载此邮政编号http://www.sendspace.com/file/l48jxg将此文件解压缩,您可以获得两个 .h 和 .m 来加载Indicatore视图。将其拖放到您的项目中。
现在你可以像Bellow一样使用它: -
如果您希望显示活动指标,直到数据未加载: -
import LoadingView.h into your Class
,
创建对象
loadingView =[LoadingView loadingViewInView:self.view:@"Please Wait.."];
此时将此代码与olso yourTableView.userInterfaceEnable=FALSE;
并在数据加载完成方法中放置此
[loadingView removeFromSuperview];
yourTableView.userInterfaceEnable=TRUE;
你加载视图如下: -
<强>更新强>
它不会首先执行您的TableView委托。
1)如果您使用NSURLConnection
对于Parsiong WebServices,您可以在加载完成后重新加载Yout TableView数据: -
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
//your code
[yourTableView reloadData];
}
2)如果您使用NSXMLParser
对于Parsiong WebServices,您可以在加载完成后重新加载Yout TableView数据: -
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
//your code
[yourTableView reloadData];
}
答案 1 :(得分:0)