No se puede generar un nuevo map de sección con un recuento de sección antiguo: 1 y un nuevo recuento de sección: 0 con FetchedResultsController

En mi controller de vista tengo un fetchedResultsController implementado y todo funciona bien (mostrando filas, varias secciones, búsqueda, etc.).

Pero recibo un error al intentar actualizar o eliminar la última fila en la sección (cuando digo la "última fila", me refiero a que solo queda una fila en la sección). Si hay más de una fila en la sección, cuando actualizo su valor (en Datos básicos), sucede sin errores. He leído esto , esto y esto, pero no me ayudó (la solución está desactualizada), y no he encontrado ninguna solución a mi problema en StackOverflow y en Internet. Necesito ayuda con esto. Estoy usando Xcode 8.3.3 y Swift 3.

Aquí está el error que obtengo al tratar de hacer actualizaciones en la fila "Solo" en cualquier sección de una tableView:

CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. UITableView internal bug: unable to generate a new section map with old section count: 1 and new section count: 0 with userInfo (null) 

Estoy usando este método para devolver el número de secciones:

  func numberOfSections(in tableView: UITableView) -> Int { return fetchedResultsController?.sections?.count ?? 0 } 

Este es el método para get el número de filas:

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if let sections = fetchedResultsController.sections { let currentSection = sections[section] return currentSection.numberOfObjects } return 0 } 

También tengo los siguientes methods en mi opinión Controlador:

 func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) { self.tableView.beginUpdates() } func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) { self.tableView.endUpdates() } func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) { switch type { case .delete: guard let path = indexPath else { return } tableView.deleteRows(at: [path], with: .none) case .insert: guard let path = newIndexPath else { return } tableView.insertRows(at: [path], with: .automatic) case .move: guard let _ = indexPath, let _ = newIndexPath else { return } if indexPath != newIndexPath { tableView.deleteRows(at: [indexPath!], with: .none) tableView.insertRows(at: [newIndexPath!], with: .none) } case .update: guard let path = indexPath else { return } tableView.reloadRows(at: [path], with: .none) // No blinking with .none } } 

He intentado cambiar el método numberOfSections para devolver 1 sección si no hay secciones,

func numberOfSections (en tableView: UITableView) -> Int {

 if self.fetchedResultsController.sections?.count == 0 { return 1 } else { return fetchedResultsController?.sections?.count ?? 1 } 

}

pero yo estoy recibiendo otro error en este caso.

  An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. *** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray with userInfo (null) 

Después de algunos bashs encontré una solución:

Después de agregar este método no tengo errores:

 func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange sectionInfo: NSFetchedResultsSectionInfo, atSectionIndex sectionIndex: Int, for 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: .fade) case .move: break case .update: break } }