我有几个表视图,它们将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]
,为什么它不自动包含在主队列中?我想可能是因为我没有明确地调用它。在那种情况下,我是否必须类似地包装我的所有功能?