1

J'utilise Core Data et KVO pour rechercher des changements de valeurs afin de déclencher des sauvegardes dans le magasin de données. J'ai une vue de table avec la recherche accrochée à NSFetchedResultsController. Lorsque la recherche change, un nouveau contrôleur de résultats est créé en appuyant sur le bouton Rechercher. Lorsque l'utilisateur sélectionne un élément dans la vue de la table des résultats, l'utilisateur entre une vue détaillée et peut apporter des modifications.Core Data, KVO et NSInternalInconsistencyException

C'est là que je rencontre les problèmes. Lorsque l'utilisateur effectue une modification dans un contrôle UIControl distinct que j'ai fait, la vue détaillée est notifiée et peut utiliser le NSFetchedResultsController il se souvient de quand la vue de table m'a poussé sur la pile de vue pour obtenir le NSManagedObjectContext et faire un enregistrement. Quand je le fais, je reçois parfois l'erreur suivante:

Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. no object at index 89 in section at index 0 with userInfo (null) 
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'no object at index 89 in section at index 0' 

Je trouve que cela a tendance à se produire lorsque je fais une recherche et un objet qui ne sont pas sur le dessus de la table est déplacée au sommet . Je sais vaguement ce qui pourrait être mal à l'arrière de la tête, mais j'apprécierais tous les conseils sur la façon de résoudre ce problème.

Répondre

1

J'ai compris ce qui n'allait pas. J'ai oublié de mettre hors service le vieux délégué de NSFetchedResultsController, et j'ai également oublié de sortir le NSFetchedResultsController. Ma sous-classe UITableView a également répondu aux mises à jour du NSFetchedResultsController par l'intermédiaire des délégués et a provoqué des appels étranges.

+0

Heureux de vous voir résolu le problème. Ce problème est assez commun et facile à oublier :) –