【问题标题】:Disable animations produced by NSFetchedResultsController on batch update deleting在批量更新删除时禁用 NSFetchedResultsController 生成的动画
【发布时间】:2015-03-10 21:59:05
【问题描述】:
我目前正在使用 NSFetchedResultsController 在 UITableView 实例中显示内容。
在某些时候,我会在 Core Data 中进行批量删除,然后进行批量插入。结果,NSFetchedResultsControllerDelegate 将插入和删除一一进行。这给 GUI 带来了一种奇怪的外观,您可以在其中看到行被逐一删除或插入。
是否可以实现
NSFetchedResultsControllerDelegate 一次清除或插入一批行,而不是反复执行?
【问题讨论】:
标签:
ios
animation
nsfetchedresultscontroller
【解决方案1】:
- 将 NSFetchedResultsController 的委托设置为 nil
- 进行批量更改
- 使 NSFetchedResultsController 重新获取其内容(即
performFetch:)
- 将 NSFetchedResultsController 的委托设置回您的 viewController
- 重新加载tableView
我对我的 NSFetchedResultsController 使用通常的惰性 getter 方法,因此我可以将其实例变量设置为 nil,并且 tableView 重新加载将创建一个新的。
例如:
// 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
}