2010-03-12 6 views
3

Je suis en train de créer une application de données de base. Quelques fois lorsque vous essayez d'enregistrer les données, je vois l'erreur suivante:iPhone erreur d'enregistrement Coredata

erreur: NSInvalidArgumentException, Raison: * -_referenceData64 uniquement définis pour la classe abstraite. Définir - [NSTemporaryObjectID_default _referenceData64] !, Description: * -_referenceData64 uniquement défini pour la classe abstraite. Définir - [NSTemporaryObjectID_default _referenceData64]!

Je ne comprenais pas pourquoi cette erreur arrive et comment l'éviter. Quelqu'un peut-il m'aider s'il vous plaît.

+2

A quoi ressemble votre modèle –

Répondre

3

Éditer: La réponse originale ci-dessous est techniquement correcte mais ne décrit pas avec précision la véritable source de l'erreur. Le moteur d'exécution ne peut pas trouver l'attribut correct, mais la raison pour laquelle il ne peut pas le trouver est parce que l'entité existe dans un autre contexte d'objet géré. L'OP n'a probablement jamais eu d'attribut _referenceData64 pour aucune de ses entités.

Voir: http://www.cocoadev.com/index.pl?TemporaryObjectIdsDoNotRespondToReferenceData

Réponse d'origine:

Vous avez une classe qui a un attribut _referenceData64. Dans le modèle de données, cette classe est marquée comme "abstraite" Sélectionnez l'entité dans l'éditeur de modèle de données et cochez la case ci-dessous "abstract" Si elle est cochée, alors c'est votre problème

Une entité abstraite Les entités abstraites existent simplement pour fournir des modèles pour les sous-classes

+1

Ce n'est pas vraiment correct, à moins de posséder une sous-classe. _referenceData64 est une propriété sur un objet racine abstrait caché utilisé en interne par CoreData, cette erreur n'a rien à voir avec ce que vous avez dans votre modèle, vous le verrez le plus souvent lorsque vous faites quelque chose de mal (comme former des relations MOC croisées). suis également relativement convaincu Il y a des bogues de threading internes à CoreData qui peuvent aussi causer cela dans du code multithread correctement écrit. –

+0

Vous semblez avoir raison. Je n'ai jamais frappé cela auparavant, mais je ne le ferais pas à moins que je fasse une erreur spécifique. Cependant, le concept de base de ma réponse est le son. Le moteur d'exécution tente de trouver et l'attribut d'entité qui n'existe pas dans ce contexte. Apparemment, c'était assez bon pour le PO de traquer le problème. – TechZen

+0

** Addenda: ** Depuis qu'Apple a ajouté [support du type de contexte concurrentiel] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html#// apple_ref/doc/c_ref/NSManagedObjectContextConcurrencyType) pour les nouveaux contextes, cette erreur peut également être levée en raison de conditions de concurrence introduites en utilisant 'NSMainQueueConcurrencyType'. Ceci peut alors être résolu en changeant en 'NSConfinementConcurrencyType'. – epologee

Questions connexes