2012-03-22 1 views
5

呼び出す二度目は私がWebサービスのiOSのUITableView reloadDataのみのテーブルを更新し、私はここに私のリロード機能

if([elementName isEqualToString:@"Response"]) { 
    Response = NO; 
    LookupView *lookupView = [[LookupView alloc] initWithNibName:@"LookupView" bundle:nil]; 
    [lookupView reloadTable:self]; 
} 

問題からデータを受信した後、それを呼び出すところ、私のリロード機能ここで

- (void) reloadTable:(id)sender 
{ 
    NSLog(@"Reload Table"); 
    NSLog(@"%@",[appDelegate queryList]); 
    [self.driverTable reloadData]; 
    [self.driverTable setNeedsLayout]; 
    [self.driverTable setNeedsDisplay]; 
} 

があります私が検索ボタンを押してデータを受信して​​検索を行った後です。テーブルは新しいデータで更新されません。再度同じボタンを押して同じ機能を呼び出すと、テーブルがリロードされます。今私はテーブルのリロードを呼び出す前に配列を出力するので、データがそこにあることを知っている。

なぜでしょうか?

+0

なぜsetNeedsLayoutとsetNeedsDisplayが必要ですか? UITableViewは再描画を必要とせず、リロード時に自身を処理します。 – CodaFi

+0

ああ、私はちょうどここで解決のために研究していた、同様の問題を抱えている人々がこれを言いましたので、私はちょうど試していました –

+0

@CodaFiに記載された方法を削除してください。 –

答えて

6

私は同じ問題を抱えています。 Appleのドキュメントでは、reloadDataを「行を挿入または削除するメソッドで呼び出さないでください」。私が使用した回避策は、テーブルを更新した直後でないようにreloadDataの呼び出しを遅らせることです。この試してください:私はこのアプローチから見るた影響delayReloadData

-(void)delayedReloadData{ 
    [self.tableView reloadData]; 
} 

負側の次の実装で適切な場所に

[self performSelector:@selector(delayedReloadData) withObject:nil afterDelay:0.5]; 

する表の行が表示されている場合、短い遅延が存在することですその内容を表示する前に。

+0

これは私のために働いているようでした –

+0

[this](http://stackoverflow.com/questions/14018754/why-reloaddata-shouldnt-be-called-on-methods-that -delete-insert-rows)質問は、@ bobnobleの回答 – abbood

0

私はあなたのif loopelementNameがあることを見て、XML解析をしていることを知りました。あなたの解析コードにload a NIB fileが必要な理由それの使用は何ですか?ちょうどこのようにreloadTable:メソッドを呼び出すことができます。

[self reloadTable:self]; 

あなたapp delegateファイル内のいくつかの配列を使用して、あなたのtableViewを移入されています。では、ViewControllerでデリゲートを初期化しましたか?

+0

へのフォローアップとして数えることができます。そうです、私はアプリケーションデリゲートを使用してテーブルのデータを含む配列にデータを取り込みます。すべての情報が配列にロードされることを知ったら、私は、アプリケーションデリゲートを使用して、テーブルのビューコントローラでリフレッシュテーブル関数を呼び出します。 –

+0

メッセージが間違っています... –

関連する問題