Tengo un pequeño problema con mi UITableViewController o NSFetchedResultsController. No estoy seguro de cuál es el problema, pero supongo que es el UITableViewController.Cómo actualizar un UITableViewController o NSFetchedResultsController?
Como ya he dicho uso un NSFetchedResultsController para llenar mis datos en un UITableViewController. Los datos están ordenados por fecha y también se muestran en secciones por fecha-año, p. Mayo de 2010/junio de 2010/y así sucesivamente. Esto se muestra como el encabezado de la sección.
Ahora cuando agrego nuevos datos, se utiliza automáticamente la fecha actual como predeterminada, pero si quiero usar una fecha, que no está actualmente en la lista de la sección, por ejemplo, Abril de 2010 (actualmente mayo y junio en la lista), entonces esto no se muestra correctamente. Solo cuando salga de la aplicación y la vuelva a iniciar, mostrará los encabezados de las nuevas secciones y todo estará bien.
Así que de alguna manera necesito poder actualizar mi lista o actualizarla. Simplemente al agregarlo al contexto y cambiarlo no parece actualizarlo.
Una vez más, no estoy seguro de lo que necesito para actualizar, si es mi objeto NSFetchedResultsController o la UITableViewController.
ACTUALIZACIÓN # 1:
simplemente me di cuenta de que hay una excepción en este método:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
// The fetch controller has sent all current change notifications, so tell the table view to process all updates.
[self.tableView endUpdates];
}
Aquí es donde me muevo los datos:
- (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];
// Reloading the section inserts a new row and ensures that titles are updated appropriately.
[tableView reloadSections:[NSIndexSet indexSetWithIndex:newIndexPath.section] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
Este método es bastante muy tomado del ejemplo de CoreDataBooks de Apple. Y este es el error:
Error de aplicación grave. Un excepción fue capturado por el delegado de NSFetchedResultsController durante una llamada a -controllerDidChangeContent :. *** - [NSMutableArray removeObjectAtIndex:]: Índice 1 más allá de los límites [0 .. 0] con userInfo (nulo)
Y después de eso, el modo de edición (donde aparece el botón de borrar) no funciona nunca más.
Gracias.
eso es lo que he añadido en la pregunta ..., a excepción viene después de eso. – elementsense
Ni siquiera está mencionando 'controller: didChangeSection: atIndex: forChangeType:'. –
isnt -controller: didChangeObject: atIndexPath: forChangeType: newIndexPath haciendo lo mismo? – elementsense