Я использую эту функцию для обновления одного значения объекта в CoreData. По какой-то причине каждый раз, когда я меняю значение imageData компонента, значение сохраняется, но ячейка удаляется из tableView. Что мне не хватает? Спасибо!
func ImageDoneEditing(image: UIImage?) {
guard let imageData = image?.jpegData(compressionQuality: 1),
let componentRow = dropboxController?.selectedComponentRow else { return }
let component = self.fetchedResultsController.object(at: IndexPath(row: componentRow, section: 0))
self.dropboxController?.updateDropbox(imageData: imageData, path: path, imageName: "\(component.id)")
component.imageData = imageData
CoreDataStack.shared.save()
}
Методы делегирования
// MARK: - NSFetchedResultsControllerDelegate
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.beginUpdates()
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.endUpdates()
}
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange sectionInfo: NSFetchedResultsSectionInfo, atSectionIndex sectionIndex: Int, for type: NSFetchedResultsChangeType) {
let indexSet = IndexSet(integer: sectionIndex)
switch type {
case .insert:
tableView.insertSections(indexSet, with: .automatic)
case .delete:
tableView.deleteSections(indexSet, with: .automatic)
default:
return
}
}
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
switch type {
case .insert:
guard let newIndexPath = newIndexPath else { return }
tableView.insertRows(at: [newIndexPath], with: .automatic)
case .delete:
guard let indexPath = indexPath else { return }
tableView.deleteRows(at: [indexPath], with: .automatic)
case .move:
guard let indexPath = indexPath,
let newIndexPath = newIndexPath else { return }
tableView.moveRow(at: indexPath, to: newIndexPath)
case .update:
guard let indexPath = indexPath else { return }
tableView.reloadRows(at: [indexPath], with: .automatic)
@unknown default:
fatalError()
}
}