0

UITableviewは、Webサービスからデータを取得した後にデータをロードする必要があるという要件があります。巨大なデータを取得するとき、私のuitableviewは空を表示しています。その代わりに、データがUITableviewにロードされるまでUIActivityIndi​​catorが表示されます。

以下のように試していますが、目的の機能を取得できません。助けてください。

また、Webサービスから返されるデータが膨大な場合に、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];

}
4

2 に答える 2

1

こんにちはこのzipをダウンロードhttp://www.sendspace.com/file/l48jxgこのファイルを解凍して、 インジケータービューをロードするための2つの.h.mを取得します。これをプロジェクトにドラッグアンドドロップします。

今、あなたはベローのようにこれを使うことができます:-

データがロードされないまでアクティビティインジケーターを表示したい場合:-

import LoadingView.h into your Class

オブジェクトを作成する

loadingView =[LoadingView loadingViewInView:self.view:@"Please Wait.."]; 現時点では、このコードをolsoのように配置しますyourTableView.userInterfaceEnable=FALSE;

そしてデータロードフィニッシュメソッドでこれを置きます

[loadingView removeFromSuperview];

yourTableView.userInterfaceEnable=TRUE;

次のようなビューを読み込んでいます:-

ここに画像の説明を入力してください

アップデート

TableViewデリゲートが最初に実行されることは改善されません。

1) For Parsiong WebServicesを使用している場合はNSURLConnection、次の場所でFinishをロードした後にYoutTableViewデータをリロードできます。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    

    //your code
    [yourTableView reloadData];
    
}

2) For Parsiong WebServicesを使用している場合は、次NSXMLParser の場所でFinishをロードした後にYoutTableViewデータをリロードできます。

- (void)parserDidEndDocument:(NSXMLParser *)parser 
{

    //your code
    [yourTableView reloadData];
}
于 2013-02-22T05:23:21.323 に答える
0

データが読み込まれるまでユーザーの操作を停止するこのアクティビティ インジケーターを試してください。

github で利用可能な MBProgressHud を使用します

楽しいコーディングを..

于 2013-02-22T05:13:35.507 に答える