0

そのため、json 配列が正の値を返す場合は、以下のコードを使用して json 配列を循環させ、すべての配列を含む別の配列に json 配列を追加します。ただし、さまざまな動的情報をプラグインするいくつかの異なる json URL を通過するため、完了するまでに時間がかかる場合があります。

以下のコードを編集して、より基本的な情報を表示しました。私の問題は、 for ループが終了するまでデータが実際に配列に入力されないことです。すべての onlineChannels.count を実行した後ではなく、見つかったらすぐに追加する必要があります - 何か助けはありますか?

for (int i = 0; i<onlineChannels.count; i++) {
       [jsonResults addObject:[parsingJson objectAtIndex:0]];
        NSLog(@"%i",jsonResults.count);
        [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
        [self.tableView reloadData];
    } else {
        [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
        [self.tableView reloadData];
    }
}
4

1 に答える 1

0

私の問題は、 for ループが終了するまでデータが実際に配列に入力されないことです。

どうして知っていますか?

を呼び出している-reloadDataようですが、変更がすぐにテーブルに反映されることを期待しているのでしょうか? オブジェクトすぐに配列に追加されていると思いますが、変更はすぐにはテーブルに表示されません。-reloadData実際にはテーブルを再描画しません。描画はメインの実行ループの一部として行われます。このコードをメイン スレッドで実行している可能性があります。そうすることで、実行ループがテーブルを再描画する時間を確保できなくなります。

この種の問題を解決する最善の方法は、ループなどの時間のかかるプロセスをバックグラウンド スレッドに移動することです。これにより、メイン スレッドは必要に応じてテーブルを再描画できるようになり、アプリの応答性も向上します。

また、そのアイテムの行が表示されていない場合でも、単一のアイテムを追加するたびにテーブルにすべてのデータをリロードさせるのは非常に無駄に思えます。reloadRowsAtIndexPaths:withRowAnimation:代わりに、変更されたテーブルの部分のみを更新するようなメソッドを呼び出すことを検討してください。

于 2013-07-24T21:12:35.190 に答える