Я использую NSFetchedResultsController для отображения списка тренировок, сгруппированных по разделам с датой их завершения.
Графически это можно представить так:
ЯНВ 20 , 2020
Тренировка 1
Тренировка 2
ЯНВ 21, 2020
Тренировка 1
Тренировка 2
Отображение каждого раздела - это общее расстояние, пройденное пользователем в этот день.
Всякий раз, когда я обновляю любую тренировку (изменяю ее расстояние), ячейки tableView обновляются, но раздел, который содержит общее расстояние за день не меняется.
Мне нужно перезагрузить tableView, чтобы изменения вступили в силу.
Метод делегата в NSFetchedResultsControllerDelegate : controller(_:didChange:atSectionIndex:for:)
is вызывается только при добавлении или удалении нового раздела.
Я искал много вопросов SO, но не нашел решения. Было бы замечательно, если бы кто-нибудь указал мне правильное направление в этом отношении.
Ниже описано, как я создаю свой NSFetchResultsController
lazy var fetchedResultsController: NSFetchedResultsController<CD_Run> = {
let fetchRequest = NSFetchRequest<MY_ENTITY>(entityName: "MY_ENTITY")
let sectionSortDescriptor = NSSortDescriptor(key: "daySectionIdentifier", ascending: false)
let startTimeSortDescriptor = NSSortDescriptor(key: "startTime", ascending: false)
fetchRequest.sortDescriptors = [sectionSortDescriptor, startTimeSortDescriptor]
fetchRequest.fetchBatchSize = 200
let controller = NSFetchedResultsController(fetchRequest: fetchRequest,
managedObjectContext: CoreDataManager.shared()._managedObjectContext,
sectionNameKeyPath: "daySectionIdentifier",
cacheName: nil)
controller.delegate = self
return controller
}()