3 votes

Erreur CoreData étrange ... la valeur renvoyée par insertNewObjectFortityForName : semble être corrompue.

J'ai une erreur très étrange qui se produit dans une application qui fonctionne depuis longtemps.

Je ne peux plus créer une de mes entités dans mon modèle CoreData.

Lorsque je crée une entité particulière dans mon modèle et que j'essaie de l'imprimer en utilisant NSLog( @ "%@", obj ), j'obtiens ce message étrange :

2011-11-08 13:03:05.936 iLearnFast [31541:15503] - [__NSCFNumber objectID] : sélecteur non reconnu envoyé à l'instance 0xa069e20

Lorsque je boucle sur les attributs / relations de cet objet et que je les imprime, une relation particulière renvoie une valeur étrange de [obj valueForKey :]. La valeur qu'elle renvoie est le même pointeur/objet que celui mentionné dans le message d'erreur ci-dessus.

Je pensais que j'avais peut-être corrompu la mémoire quelque part, mais j'ai inséré le code pour créer l'entité au tout début de mon exécutable dès que les structures de données sont initialisées, et j'obtiens le même problème. Je suis extrêmement confiant que je n'ai pas fait d'erreur de mémoire à ce stade (et une erreur de mémoire serait plus aléatoire .... Je peux créer des milliers d'objets, et toujours la même entité a le même problème avec la même relation, et aucune autre entité n'a jamais de problème).

Après avoir circonscrit le problème à cette seule relation, j'ai découvert que je pouvais faire disparaître l'erreur en renommant la relation en n'importe quel autre nom. La relation s'appelle "file" depuis la création de mon application.

Je peux refaire fonctionner mon code en renommant la propriété, même si cela perturbe ma migration automatique vers la légèreté, mais je dois maintenant trouver comment effectuer une migration plus complexe.

Si quelqu'un a une idée de ce qui pourrait ne pas fonctionner, je l'apprécierais vraiment.

Je suis perplexe et j'ai vraiment l'impression qu'il s'agit d'un bug dans le SDK d'Apple.

J'utilise actuellement XCode 4.2 et j'ai essayé les deux SDK pour iOS5.0 et iOS4.3 et les deux avaient le même comportement.

Ron

4voto

beryllium Points 18138

2011-11-08 13:03:05.936 iLearnFast [31541:15503] - [__NSCFNumber objectID] : sélecteur non reconnu envoyé à l'instance 0xa069e20

Je suppose que vous avez une fuite dans votre code. Cette ligne signifie que vous essayez d'accéder objectID qui contient votre NSManagedObject personnalisé, mais pour une raison quelconque, cet objet n'existe plus. Essayez de vérifier votre code sur les fuites de mémoire.

4voto

Damo Points 5382

J'ai vu ce même problème se poser dans un projet Swift utilisant Core Data. Le problème n'est apparu que lorsque j'ai poussé l'application sur un appareil (elle fonctionnait bien dans le simulateur depuis un certain temps).

Le problème portait sur une relation entre deux entités. Pour illustrer, voir l'image du problème :

Problem

Après avoir cherché pendant un certain temps dans SO, j'ai décidé de renommer les relations, capitaine y joueur . Voir l'image fixe :

Fix

Ce n'est qu'après avoir renommé les deux "extrémités" de la relation que l'erreur a disparu.

1voto

Al Zonke Points 119

J'ai eu le même message d'erreur et dans mon cas, la raison était que j'avais une propriété de relation teacher et créé une propriété en lecture seule isTeacher .

Ce problème est dû aux conventions de noms d'Objective-C : CoreData a été confondu en obtenant teacher propriété. Au lieu d'accéder à une relation réelle et de me donner un objet réel, il prend isTeacher getter avec BOOL et le transformer en NSNumber et essayer de le traiter comme une relation CoreData et appeler objectID .

Après avoir renommé isTeacher a isTeacherLicence Le problème est résolu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X