2009-04-03 19 views
6

私はUITableViewControllerをRootViewControllerとして持っています。 RootViewControllerのスレッドから開始する別のスレッドから取得したデータに応じて、テーブルに行を追加する必要があります。他のスレッドから私のRootViewControllerのスレッドに戻ってきたとき、私は更新されたデータを持っていますが、TableViewを更新することはできません。私は[self.tableview reloadData];メソッドを呼び出しましたが、それは動作していないようです。私も[self.tableview setNeedsDisplay]呼び出しを試みましたが、成功しませんでした。新しいデータでTableViewを更新するにはどうすればよいですか?UITableViewを更新できません

In my RootViewController Class I have: 

- (void) reload { 

for(int i=0;i<[camDetails count];i++) 
{ 
    cCameraInformation *obj = [[cCameraInformation alloc] init]; 
    obj = [camDetails objectAtIndex:i]; 
    NSString *tString = [[NSString alloc] initWithFormat: @"  Remote  %s  %s",[obj->sCameraid UTF8String],[obj->sCameraid UTF8String]]; 
    [tableEntry addObject:tString]; 
} 
[self.tableView reloadData]; 
} 

次に、データを連続的に受信している受信クラススレッドがあります。基本クラスはNSObjectです。だから、私は受信スレッドでRootViewControllerクラスのこのリロードデータメソッドを呼び出すために、アプリケーションデリゲートクラス(RootViewControllerクラスのインスタンスを持っています)を使用しました。

performSelectorOnMainThreadを使用して上記のメソッドを呼び出すことができません。

答えて

12

ちょっとあなたがメインスレッドでテーブルビューをリロード/テーブルビューの表示を更新しているあなたはよろしいですか?私は、同じ問題に直面したデータは、そこにあったが、ユーザーがスクロールするまで、テーブルビューは、グーグル時

を更新していなかった私は、あなたが以下の

コード例メインUIスレッド上reloadDataメソッドを呼び出す必要があります知って来ました:

- (void) getDataOnNewThread 
{ 
    // code here to populate your data source 
    // call refreshTableViewOnMainThread like below: 
    [self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:NO]; 
} 

- (void) refreshTableView 
{ 
    [tableView reloadData]; 
} 
1

numberOfRowsForSectionから正しい値が返されていることを確認してください。

また、cellForRowAtIndexPathメソッドがこのデータを使用してセルの内容を取得していることを確認してください。

reloadDataメソッドは、他のスレッドではなくメインスレッドで呼び出す必要があります。

関連するコードを投稿できる場合は、より良いお手伝いをすることができます。

関連する問題