0

Je travaille avec une application similaire à l'exemple de recette de données de base de pomme. Je veux être en mesure de supprimer l'entrée de la vue de détail, un peu comme l'application de contacts d'Apple.Comment supprimer une entrée de données principale à partir de la vue détaillée?

Le code ci-dessous supprime la première entrée et non l'entrée sélectionnée. Je ne sais pas ce que je fais mal.

NSIndexPath *indexPath = [myTableView indexPathForSelectedRow]; 
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext]; 
[context deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]]; 
[myTableView reloadData]; 

Répondre

0

Le problème le plus probable est que indexPathForSelectedRow: ne retourne pas la indexPath vous pensez qu'il est. Sinon, si le chemin d'accès à la clé de nom de section n'est pas configuré correctement lorsque vous avez configuré le contrôleur de résultats récupérés, vous pouvez obtenir des retours impairs car il perd la trace des lignes qui vont avec quelle section.

+0

Je peux aller à ce sujet tout faux. Je souhaite donner à l'utilisateur la possibilité d'annuler une entrée démarrée. Ou quand ils ont fini de créer une entrée, pour pouvoir la supprimer. J'ai un bouton d'annulation dans le AddViewController qui est un délégué au RootController qui déclenche le ci-dessus le code. Comment indexer l'index avec l'entrée avec laquelle l'utilisateur travaille actuellement? – Sam

+0

Ne vous embêtez pas avec l'indexPath. Vous devriez avoir une référence à managedObject et pouvez le supprimer du managedObjectContext. Le fetchedResultsController devrait gérer la suppression pour vous et mettre à jour la table automatiquement. – MrHen

+0

Oui, je suis d'accord. Si vous avez l'objet en main, comme dans une vue détaillée, alors vous n'avez pas besoin d'utiliser son index dans le contrôleur de résultats récupérés ou ailleurs. Chaque objet géré est lié à son contexte. Dites juste le contexte pour le supprimer et c'est parti. Le contrôleur de résultats récupérés observera le contexte et mettra à jour automatiquement la table pour vous. – TechZen

2

Merci pour l'aide. C'est le code qui a fait l'affaire

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext]; 
[context deleteObject:entry]; 
[myTableView reloadData]; 
Questions connexes