在批量更新删除时禁用 NSFetchedResultsController 生成的动画
Posted
技术标签:
【中文标题】在批量更新删除时禁用 NSFetchedResultsController 生成的动画【英文标题】:Disable animations produced by NSFetchedResultsController on batch update deleting 【发布时间】:2015-03-10 21:59:05 【问题描述】:我目前正在使用 NSFetchedResultsController 在 UITableView 实例中显示内容。
在某些时候,我会在 Core Data 中进行批量删除,然后进行批量插入。结果,NSFetchedResultsControllerDelegate 将插入和删除一一进行。这给 GUI 带来了一种奇怪的外观,您可以在其中看到行被逐一删除或插入。
是否可以实现 NSFetchedResultsControllerDelegate 一次清除或插入一批行,而不是反复执行?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于在批量更新删除时禁用 NSFetchedResultsController 生成的动画的主要内容,如果未能解决你的问题,请参考以下文章