2009-10-13 3 views
1

que je suis this how-to pour mettre en œuvre le stockage de base de données dans mon application:Cocoa-Touch, Core Data: Obtenir exception en essayant de insertNewObjectForEntityForName: inManagedObjectContext:

J'ai un Model.xcdatamodel qui définit un modèle Something. J'ai utilisé XCode pour générer une classe pour ce modèle.
J'ai importé la classe dans mon fichier .m où je suis en train de:

Something* s = (Something *)[NSEntityDescription insertNewObjectForEntityForName:@"Something" inManagedObjectContext:managedObjectContext]; 

Mais ce qui provoque l'erreur suivante: 2009-10-13 21:18:11.961 w9a[4840:20b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Something''

Est-ce que je manque quelque chose?

+0

Êtes-vous sûr que votre 'managedObjectContext' a' une instance persistentStoreCoordinator' avec un modèle d'objet géré qui contient 'entité Something'? En d'autres termes, êtes-vous sûr d'avoir correctement construit l'ensemble de la pile de données de base? –

Répondre

4

Personnellement, je préfère le méthode suivante:

// With some NSManagedObjectContext *context 
NSEntityDescription *desc = [NSEntityDescription entityForName:@"Something" 
             inManagedObjectContext:context]; 
Something *s = [[[Something alloc] initWithEntity:desc 
        insertIntoManagedObjectContext:context] autorelease];

je l'ai remarqué qu'il est moins sujette à des erreurs aléatoires de base de données et est plus facile à déboguer. Il fait effectivement la même chose que votre code, mais obtient explicitement une description d'entité en premier, de sorte que vous pouvez déboguer cela séparément si besoin est.

1

Semble que vous n'avez pas un objet NSManageObject nommé "Something" dans votre modèle d'objet ... faites-vous votre entité dans le modèle objet? Je ne suis pas sûr si vous avez besoin de générer le code aussi, mais vous pouvez faire xcode pour vous automatiquement en cliquant sur l'entité, en disant nouveau, et en sélectionnant Managed Object dans le menu

+0

Je ne suis pas sûr de comprendre exactement ce que vous demandez, mais j'ai confirmé que j'ai l'élément dans mon modèle (le fichier .xcdatamodel ouvert dans XCode), j'ai aussi la classe générée, elle est importée. J'ai également vérifié l'orthographe des noms, ils sont corrects. – Prody

+0

c'est ce que je demandais – Daniel

+0

c'est bizarre, d'habitude quand je vois que l'erreur est juste en train d'épeler sur le nom d'entité ou quelque chose comme ça – Daniel

0

J'ai trouvé mon problème, le NSManagedObjectContext n'a pas été initialisé correctement pour une raison quelconque. J'ai réécrit ce code en suivant le how-to et maintenant il semble fonctionner.

Merci quand même :)

Questions connexes