2012-02-07 4 views
1

私のiOS5アプリケーションでは、progressLabelArrayに格納されたNSString値に基づいてセルを表示するUITableViewがあります。私は、私の下位層からコールバックを登録して、私は自分自身への参照を通じてUI更新メソッドを呼び出すことができるC関数でそれらを受け取ります。すべてのコールバックでUITableViewを更新/再ロード

static void callback_handler(int nCode) { 
     [refToSelf updateProgressView:nCode]; 
    } 


    -(void) updateProgressView:(int32_t) nCode 
    { 
     NSString *status = nil; 
     status = [self progressUpdateToString:nCode]; 
     [self.progressLabelArray insertObject:status atIndex:0]; 
     [self.progressTableView reloadData]; 
     [self.progressTableView setNeedsDisplay]; 
    } 

私は、コールバックが同じ(UIスレッド)に来ていることから、performSelectorOnMainThreadが必要とされないことが、推測します。

私の問題は、全体の操作が完了したときにテーブルビューが最新表示され、最後のコールバック値が表示されることです。すべてのコールバック後にUIを更新するように強制する方法はありますか?コールバックが比較的早くなる可能性があります。

+1

コールが戻ってあまりにも速く来ているならば、どのようにデータの変化を観察するだろう唯一の最後の変更である理由、すなわち、可視 –

+0

まずは気付かれないほど速くはなく、さまざまなコールバックの後にデバッグして休憩をとると、私はビューの初期値を見るだけです。 –

+0

まだ問題を解決できません。私の親愛なるiOSの友人を助けてください - 助けてください! –

答えて

0

進捗コードを別のスレッドで実行して問題を解決しました。コールバックはseprateスレッドに来て、メインスレッド(UIスレッド)を更新します。私は、UIスレッドがUIを更新するためのサイクルを得ていなかったと思います。

0

は、次のブロックにあなたの

tableView.reloadData()

コールを入れて、あなたのテーブルビューは、すべての問題がなく、リアルタイムのアプリのようにスクロールバーを更新せずに更新されます。迅速な3については

のObjective Cの場合
DispatchQueue.main.async() 
{ 
    tableView.reloadData() 
} 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // Background work 
    [tableView reloadData]; 

}); 
関連する問題