Обновление значения объекта Coredata - PullRequest
0 голосов
/ 21 июня 2020

Я использую эту функцию для обновления одного значения объекта в 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()
    }
}
...