我目前正在使用NSFetchedResultsController在UITableView实例中显示内容。
在某些时候,我会进行批量删除,然后在Core Data中进行批量插入。结果,NSFetchedResultsControllerDelegate逐个进行插入和删除。这给了GUI一个奇怪的外观,你可以逐字地看到这些行被删除或逐个插入。
是否可以实现 NSFetchedResultsControllerDelegate一次清除或插入一批行而不是迭代地执行它?
答案 0 :(得分:5)
performFetch:
)我对NSFetchedResultsController使用通常的lazy getter方法,所以我可以将其实例变量设置为nil,tableView reload将创建一个新的。
e.g:
// returns a NSFetchedResultsController that has performed its fetch
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController) {
return _fetchedResultsController;
}
_fetchedResultsController = [NSFetchedResultsController alloc] initWith...
if (![_fetchedResultsController performFetch:&error]) {
...
}
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
- (void)batchRequestWithoutAnimation {
_fetchedResultsController.delegate = nil;
// mass insert/delete
_fetchedResultsController = nil;
[self.tableView reloadData]; // tableView dataSource methods call
// [self fetchedResultsController],
// which will create a new one
}