Assez nouveau sur iPhone dev. Mon application utilise Core Data, et à un moment je tente de sauver des données au cours d'une méthode NSFetchedResultsControllerDelegate:Contexte de données de base "sale": MOC enregistrer l'application de plantages
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
Je reçois plus de ce droit sur la documentation d'Apple sur le sujet. L'action de suppression ressemble à ceci:
case NSFetchedResultsChangeDelete:
[managedObjectContext deleteObject:anObject];
NSError *error;
if (![managedObjectContext save:&error]) {
NSLog(@"WTF? %@", [error description]);
}
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
Maintenant, quand je fais cela, l'objet en question sera supprimé après l'accident inévitable. Il se passe donc quelque chose de bien. L'accident est cependant intéressant:
Erreur d'application grave. Une exception a été détectée lors du traitement des modifications de base des données: échec du traitement des modifications en attente avant la sauvegarde. Le contexte est toujours sale après 100 tentatives. En règle générale, cette corruption récursive est provoquée par une méthode de validation incorrecte, -willSave ou un gestionnaire de notification. avec userInfo (null)
2010-02-09 23: 02: 03.931 app2 [26664: 207] *** Fin de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: 'Impossible de traiter les modifications en attente avant la sauvegarde. Le contexte est toujours sale après 100 tentatives. Généralement, cette saleté récursive est causée par une mauvaise méthode de validation, -willSave, ou un gestionnaire de notification.
Ma recherche a abouti à des résultats très limités - bonne chose que j'ai ici pour documenter ça, hein? :-) Mais mon instinct dit que le MOC est écrit ailleurs dans mon contrôleur, bien que je ne puisse trouver aucune preuve de ce qui se passe. La méthode viewDidLoad utilise NSFetchedResultsController pour obtenir les données initiales, mais c'est tout.
Des suggestions sur ce qui pourrait ne pas être ici? Comme d'habitude, votre esprit de ruche communautaire est très apprécié!
Cheers, Aaron
Merci à vous deux. Marcus, votre note au sujet de la méthode de délégué appelée à la suite de la sauvegarde de MOC l'a vraiment cristallisée pour moi. Je devrais aller acheter ton livre ou quelque chose ... :-) –