72 votes

'+entityForName: néant n'est pas un NSManagedObjectContext paramètre de Base de Données

J'ai ajouté tout le code de l'Application Délégué, et je suis en mesure d'ajouter au modèle de données et les récupérer à partir du modèle de données dans applicationDidFinishLaunchingWithoptions.

Mon problème c'est quand je suis en train d'écrire pour le modèle de données de mon point de Vue Contrôleur. J'ai ajouté ce code dans le fichier d'en-tête:

NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;

@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

Et ce code de mon fichier de mise en oeuvre:

NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *model = [NSEntityDescription
                          insertNewObjectForEntityForName:@"Events" 
                          inManagedObjectContext:context];
[model setValue:@"Sample Event" forKey:@"eventName"];

NSError *error;
if (![context save:&error]) {
    NSLog(@"Couldn't save: %@", [error localizedDescription]);
}

Cependant, j'obtiens l'erreur suivante:

'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Events''

Personne ne sait ce qui se passe? Toute aide serait appréciée.

46voto

Alex Godbehere Points 1272

J'avais oublié de transmettre le contexte de la vue-contrôleur. Le Rookie de l'erreur.

45voto

Vishwani Points 437

Vous pouvez passer le contexte (y compris le code suivant avant de commencer à récupérer les données de la base de données:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
context = [appDelegate managedObjectContext];

37voto

Tim Points 433

Si vous utilisez enchaîne, vous obtiendrez les mêmes problèmes si vous ne passez pas le cadre en bas de la ligne. Utiliser ce code dans la méthode prepareForSegue de classe de l'initiation de la segue:

[[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];

Cela suppose que vous maintenez votre contexte, dans une propriété appelée "managedObjectContext" bien sûr.

20voto

Hashem Aboonajmi Points 849

vous devez l'ajouter à votre viewController:

 id delegate = [[UIApplication sharedApplication] delegate];
    self.managedObjectContext = [delegate managedObjectContext];

2voto

rafaeljuzo Points 201

J'ai eu ce problème et une collègue m'a aidé. Si vous avez reçu ce message d'erreur: "entityForName: néant n'est pas un NSManagedObjectContext paramètre à la recherche pour le nom de l'entité". Et vous avez fait des changements en vous coredata modèle. Je pense que le problème pourrait ne pas être le code.

La solution peut être simple. Essayez l'une de ces options:

  • Il suffit de supprimer l'application à partir de l'appareil à tester, il devrait avoir l'ancienne version de votre modèle.
  • Créer une autre version de base de données à l'aide de Xcode, >Éditeur>Ajouter Version du Modèle.

Espérons que cela aide.

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