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]
、メイン キューに自動的に含まれないのはなぜですか? 明示的に呼び出さなかったからだと思いました。その場合、すべての関数を同様にラップする必要がありますか?