Deslizar para eliminar una celda en una tabla utilizando NSFetchedResultsController

Anteriormente tenía una implementación en funcionamiento en la que tenía un solo TableViewController, presiono el button ADD, abre otro controller de vista que permite al usuario agregar text a los campos, que a su vez agrega esa información a las entidades y attributes y podría mostrar eso en la vista de tabla. Implementando los siguientes methods, podría deslizar para eliminar una fila con éxito:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [self.managedObjectContext deleteObject:[self.transactions objectAtIndex:indexPath.row]]; [self.transactions removeObjectAtIndex:indexPath.row]; [self.tableView reloadData]; NSError *error = nil; if (![self.managedObjectContext save:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); [self.tableView reloadData]; } } } 

Ahora, he logrado implementar con éxito el NSFetchedResultsController para permitir la misma funcionalidad con la adición y obtención de información, pero solo más segura. Lo que no puedo entender ahora es cómo implementar realmente la misma function para eliminar la funcionalidad.

Agregué el:

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } 

Agregué esto y el gesto de "deslizar" simplemente no funciona para eliminar las celdas.

En el código NSFetchedReusltsController para la fuente de datos, tengo:

 - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { UITableView *tableView = self.tableView; switch(type) { case NSFetchedResultsChangeInsert: [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; break; case NSFetchedResultsChangeDelete: [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; break; case NSFetchedResultsChangeUpdate: [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath]; break; case NSFetchedResultsChangeMove: [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; break; } } 

junto con todos los methods requeridos, pero la acción de deslizar para eliminar simplemente no funciona.

Cualquier pensamiento con esto sería de gran ayuda.

Para eliminar una fila de la tabla, solo tiene que eliminar el object Core Data correspondiente:

 if (editingStyle == UITableViewCellEditingStyleDelete) { [self.managedObjectContext deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]]; NSError *error = nil; if (![self.managedObjectContext save:&error]) { // handle error } } 

Eso es todo, en particular, no necesita llamar a reloadData . Al eliminar el object, se activan los methods de delegado del controller de resultados obtenidos y se actualiza la vista de tabla.

Ahora desde su código parece que tiene una matriz de fuente de datos self.transactions . Eso está mal y debes eliminarlo. Todos los methods de origen de datos deben get la información del controller de resultados obtenidos directamente.