uitableview应该在从具有大量数据的webservice检索数据后加载

时间:2013-02-22 05:03:45

标签: iphone web-services uitableview

我要求我的UITableview在从Web服务检索数据后加载数据。检索大量数据时,我的uitableview显示为空。而不是那样,UIActivityIndi​​cator应该出现,直到数据加载到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];

}

2 个答案:

答案 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;

你加载视图如下: -

enter image description here

<强>更新

它不会首先执行您的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)

尝试此活动指示器,在您加载数据之前停止用户交互。

use MBProgressHud available on github

有一个快乐的编码..