【问题标题】: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】:
    1. 将 NSFetchedResultsController 的委托设置为 nil
    2. 进行批量更改
    3. 使 NSFetchedResultsController 重新获取其内容(即performFetch:
    4. 将 NSFetchedResultsController 的委托设置回您的 viewController
    5. 重新加载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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多