0

JSONリクエストをサーバーに送信し、結果をコア データに保存し、NSFetchedResultsController. 私は次のようにGCDを試していました:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    // Perform JSON requests.
    dispatch_async(dispatch_get_main_queue(), ^{
        [theTableView reloadData];
    });
});

ただし、これにより、UI で奇妙なことが発生する可能性があります。新しい管理対象オブジェクトは空白のセルをレンダリングし、削除された管理対象オブジェクトはセルをオーバーラップさせます。

ただし、これを行うと、すべてが正しくレンダリングされることがわかりました。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [theTableView endUpdates];
    });
}

私が知りたかったのは、なぜこれが必要なのですか?の結果として発火するのに[theTableView reloadData]、メイン キューに自動的に含まれないのはなぜですか? 明示的に呼び出さなかったからだと思いました。その場合、すべての関数を同様にラップする必要がありますか?

4

2 に答える 2