gpt4 book ai didi

swift - 带有 NSFetchedResultsController 的 TableView 闪烁得太多

转载 作者:行者123 更新时间:2023-11-30 12:27:49 24 4
gpt4 key购买 nike

我得到了一个带有 FRC 的 tableView。我使用 NSMergeByPropertyObjectTrumpMergePolicy 作为 ManagedContext 保存的 mergePolicy。

问题是当记录更新的“didChange”委托(delegate)方法被调用 3 次时。它要求按该顺序插入、删除、更新。所以我的 tableView 闪烁得太多了。

我怎样才能防止这种情况发生?因为我的应用程序的每条记录都更新了 4 次,所以 tableView 闪烁了 12 次..

我的委托(delegate)方法:

func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.beginUpdates()
}

func controller(controller: NSFetchedResultsController<NSFetchRequestResult>, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) {
switch type {
case .insert:
tableView.insertSections(NSIndexSet(index: sectionIndex) as IndexSet, with: .fade)
case .delete:
tableView.deleteSections(NSIndexSet(index: sectionIndex) as IndexSet, with: .none)
case .move:
break
case .update:
break
}
}

func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {

print("cs \(type.rawValue)")

switch type {

case .insert:
tableView.insertRows(at: [newIndexPath! as IndexPath], with: .none)
break
case .delete:
tableView.deleteRows(at: [indexPath!], with: .none)
break
case .move:
tableView.deleteRows(at: [indexPath!], with: .none)
tableView.insertRows(at: [newIndexPath!], with: .none)

//tableView.moveRow(at: indexPath!, to: newIndexPath!)
break
case .update:
tableView.reloadRows(at: [indexPath!], with: .none)
break
}
}

func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.endUpdates()
}

最佳答案

确保您没有清理数据库。由于以下原因,可能会出现闪烁:

        service.fetchDatasWith { (result) in
switch result {
case .success(let data):

DataManager.clearData() // Cleaning
DataManager.saveInCoreDataWith(array: data) // Saving again

print(data)
case .error(let message):
DispatchQueue.main.async {
AlertPresenter.presentAlertWith(title: "Error", message: message, controller: self)
}
}
}

关于swift - 带有 NSFetchedResultsController 的 TableView 闪烁得太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43954405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com