2011-09-14 1 views
0

Lors de la sauvegarde de mon contexte de données de base, j'ai l'erreur suivante. Je n'ai vraiment aucune idée d'où commencer à regarder, si vous avez même une avance ... Merci. PS: J'ai vérifié que tous les types déclarés dans les fichiers .h sont les mêmes que dans mon modèle de données.CoreData interprétant une erreur de classe d'objet

EDIT: J'ai écrasé intValue dans une catégorie de NSDate. Maintenant, je vois que timeIntervalSinceReferenceDate est appelée sur un NSNumber. J'ai essayé d'y mettre un point d'arrêt mais ça ne donne aucune information (seul le save: est devant mon code). J'ai également découvert un moyen de savoir qui sont ces objets célèbres: NSDate est un objet (appelé lastCompute) dans la même classe que le NSNumber (appelé sleep). Leur type correspond aux types déclarés en .h et au modèle de données. Mais cela ne m'indique pas pourquoi CoreData appelle intValue sur un NSDate. Un plomb? Merci

-[__NSDate intValue]: unrecognized selector sent to instance 0x6a3cba0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDate intValue]: unrecognized selector sent to instance 0x6a3cba0' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x01ca35a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x01df7313 objc_exception_throw + 44 
    2 CoreFoundation      0x01ca50bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x01c14966 ___forwarding___ + 966 
    4 CoreFoundation      0x01c14522 _CF_forwarding_prep_0 + 50 
    5 CoreData       0x00955b50 -[NSSQLiteConnection execute] + 2320 
    6 CoreData       0x009a7ebd -[NSSQLiteConnection updateRow:] + 365 
    7 CoreData       0x009a6e64 -[NSSQLConnection performAdapterOperations:] + 180 
    8 CoreData       0x009a6b0e -[NSSQLCore _performChangesWithAdapterOps:] + 494 
    9 CoreData       0x009a55ea -[NSSQLCore performChanges] + 410 
    10 CoreData       0x0099f038 -[NSSQLCore saveChanges:] + 216 
    11 CoreData       0x0095d199 -[NSSQLCore executeRequest:withContext:error:] + 409 
    12 CoreData       0x00a0d70b -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 3691 
    13 CoreData       0x00995948 -[NSManagedObjectContext save:] + 712 
+0

que diriez-vous du code où vous réalisez réellement la sauvegarde? – Eimantas

+0

Oui, personne ne peut vraiment interpréter cela ainsi que le code. – darksky

+0

- [__ NSDate intValue]: sélecteur non reconnu DIT TOUT. Les objets NSDate n'ont pas de fonction intValue. – Zigglzworth

Répondre

1

Je pense que je résolu le problème.
J'ai essayé de supprimer l'attribut NSDate. Une nouvelle erreur est survenue (expliqué here). J'ai donc vérifié tous mes [NSNumber numberWithSomething:] et j'ai découvert que je mettais des nombres créés avec int dans les attributs déclarés comme float dans le modèle de données.
J'ai corrigé toutes ces erreurs, j'ai rajouté le NSDate et maintenant mon application ne plante plus. J'espère que c'était la solution même si cela n'a rien à voir avec intValue étant appelé sur un NSDate.

2

Vous obtenez cette erreur parce que vous appelez la méthode intValue sur la NSDate Objet [date NSDate]. si vous avez besoin de faire quelque chose avec la date comme un intervalle de temps, que d'utiliser

[[NSDate date] timeIntervalSince1970] 

ou si vous avez besoin de comparer deux dates, que faire quelque chose comme ceci:

NSDate *startDate = (...some start date); 
NSDate *endDate = (...some end date); 

NSTimeInterval intervalInSeconds = [endDate timeIntervalSinceDate:startDate]; 
+0

Je ne suis pas en train d'essayer tout ça. Je stocke des dates et des nombres dans mon modèle et je ne pense pas que cela devrait être un problème. Mon problème est de trouver sur qui s'appelle intValue, je sais sur quel objet mais je ne sais pas où est cet objet "dans mon code". Avez-vous besoin de plus d'informations pour m'aider? –

0

Puisque vous changé La propriété et les opérations que vous attendez ne sont pas exécutées correctement, il semble que vous ne gérez pas correctement le versionnement du modèle de données. Assurez-vous de rafraîchir this. Mieux encore, si votre application n'a pas été publiée auprès du public ou d'une suite de testeurs et de personnes chargées de l'assurance qualité, vous pouvez commencer avec une nouvelle base de données et ne plus avoir à vous inquiéter des versions et migrations.

Lors du démarrage à partir de zéro est la voie facile, si vous prévoyez d'utiliser CoreData dans l'avenir, vous devriez vraiment lire et comprendre l'idée de versionnage et les outils disponibles pour vous dans Xcode 4.

+0

J'ai supprimé l'application et l'ai réinstallée (plusieurs fois). J'ai encore le même problème. –

Questions connexes