J'utilise CoreData dans une application iOS pour enregistrer une simple liste d'objets de localisation (nom, coordonnées). Je suis tombé deux fois dans une situation, après un avertissement de mémoire, quand les enregistrements de CoreData semblent être corrompus.CoreData: numberOfObjects in Section incorrecte
Plus précisément, (en tableView: numberOfRowsInSection :)
NSUInteger numObjects = [[[fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
renvoie 4 pour la section == 0.
Puis (en tableView: cellForRowAtIndexPath :)
aLocation = [fetchedResultsController objectAtIndexPath:indexPath];
pour indexPath [ 0,3] génère une exception:
NSRangeException: * - [_ PFArray objectAtIndex:]: index (3) au-delà des limites (3)
Par exemple, CoreData indique qu'il y a 4 lignes dans une table, mais ne peut pas renvoyer un objet pour la dernière ligne lorsque la vue de table le demande il.
Deux questions:
1) Toute pensée sur la façon dont cela pourrait se produire et comment empêcher
2) Une fois qu'il a eu lieu, est-il un moyen pour résoudre le problème de données dans le code?
Merci
Stephen
Salut Harald - vous avez peut-être raison, mais la corruption possible n'est apparue qu'après le redémarrage de l'application suite à une exception non gérée. J'ai réussi à contourner l'exception sur l'avertissement de mémoire maintenant (un comportement étrange qui n'affecte que l'iPad 4.2 (pas 3.2), donc pour l'instant ce problème a cessé de se produire.Intéressant, après avoir posté la question, la discordance dans numberOfObjects dans la section était corrigé après avoir effectué une sauvegarde sur NSManagedObjectContext. – StephenT