0

誰かが私のために何かを明確にすることができます. UITableView言うためのアップルのドキュメント

`UITableView` overrides the layoutSubviews method of `UIView` so that it calls reloadData only when you  create a new instance of `UITableView` or when you assign a new data source. 

私は次の動作を得ています:

私のviewDidLoad中で、私は持っていますtableView.dataSource = self.

私のgetDataFromDatabaseでは、 を呼び出します[tableView reloadData]。これはうまくいくように見えますが、テーブルに空の配列が取り込まれ、db 呼び出しが戻ってきたときに、データを含む配列をリロードしていると思います。

私は次のことをしようとしています:viewDidLoadで、 を削除tableView.dataSource = self;し、getDataFromDatabaseメソッドに追加します。例えば

(void)getDataFromDatabase
{
    [getData completionHandler^() // an async db call
    {
        tableView.dataSource = self;
    }];
}

これは機能していないようです。テーブルは移入されていません。[tableView reloadData]を設定した後に追加すると機能しますdataSource = selfが、ドキュメントから、 「の新しいインスタンスを作成するとき、または新しいデータソースを割り当てるときにのみ reloadData を呼び出す」reloadDataを設定すると自動的に呼び出されるべきではありません。?dataSource = selfUITableView

4

1 に答える 1

0

「completionHandler」はメインスレッドで実行されていますか? そうでない場合、またはそれについて確信がない場合は、メイン スレッドでコードを実行してみてください。Apple のドキュメントによると、メイン スレッドで UI を更新しない場合の結果は不明です。これを試すことができます:

[getData completionHandler^() // an async db call
{
    dispatch_async(dispatch_get_main_queue(), ^{
        tableView.dataSource = self;
    });

}];
于 2013-08-03T14:39:37.037 に答える