web-dev-qa-db-fra.com

"Impossible de charger NSManagedObjectModel. Nil est un paramètre URL non conforme"

Je souhaite obtenir le contexte de l'objet géré à partir d'AppDelegate, mais l'application s'est bloquée après que j'ai inséré les deux lignes de code dans la méthode, même si je n'ai rien fait d'autre. Un message se trouvait dans la zone de débogage: "CoreData: Impossible de charger NSManagedObjectModel .nil est un paramètre d’URL non conforme ... "

Le code ajouté dans ma méthode:

AppDelegate *delegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *managedObjectContext = delegate.managedObjectContext;

-managedObjectModel dans AppDelegate:

- (NSManagedObjectModel *)managedObjectModel {
// The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
if (_managedObjectModel != nil) {
    return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"FoodPin" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}

et la méthode -managedObjectContext:

- (NSManagedObjectContext *)managedObjectContext {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
if (_managedObjectContext != nil) {
    return _managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
    return nil;
}
_managedObjectContext = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
return _managedObjectContext;
}

"FoodPin" est le nom de mon projet . Alors, qu'est-ce qui ne va pas ici? Je suis nouveau dans la programmation pour iPhone (Core Data en particulier).

Quelqu'un peut-il m'aider?

Merci...

11
ZyusAn

Le problème est cette ligne:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"FoodPin" withExtension:@"momd"];

modelURL est nil, ce qui signifie que le système n'a pas pu trouver la ressource FoodPin.momd.

Assurez-vous que votre projet contient un modèle Core Data nommé FoodPin. Il apparaîtra comme FoodPin.xcdatamodeld dans le navigateur de projet.

24
Steve Wilford

J'ai eu le même problème mais pour moi le modelURL était correctement défini. Le problème était que mon fichier * .xcdatamodeld ne se trouvait plus dans les ressources du bundle de copie. Je ne sais pas pourquoi il disparaît mais pour l'ajouter à nouveau résoudre le problème.

Voici comment résoudre ce problème: Vous projetez> Construire les phases> Copier les ressources du bundle> bouton "+" et sélectionnez votre fichier xcdatamodeld

3
Tom Giraudet

NSURL * modelURL = [[NSBundle mainBundle] URLForResource: @ "XYZ" withExtension: @ "momd"];

Assurez-vous que le nom de votre modèle de données correspond à URLForResource: XYZ.

0
Ankit garg