Question

Je suis en train d'écrire un simple éditeur de vue de la table pour une entité de données de base. Malheureusement, je suis en cours d'exécution dans les problèmes.

L'erreur se produit lors de l'ajout de la première entité à la table. Le processus de mise en place de la boîte de dialogue modale est la suivante:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Group" inManagedObjectContext:context];
    insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
NSManagedObject *newManagedObject = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:context];

NameEditController *dialog = [[NameEditController alloc] init];
dialog.managedObject = newManagedObject;
[newManagedObject release];

UINavigationController *navCtrlr = [[UINavigationController alloc] initWithRootViewController:dialog];
navCtrlr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[[self navigationController] presentModalViewController: navCtrlr animated:YES];    
[navCtrlr release];

À l'intérieur de NameEditController, j'ai cette fois le bouton Done est pressé:

NSString* name = self.nameLabel.text;
[self.managedObject setValue:name forKey:@"name"];

NSError *error = nil;
if (![managedObject.managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
UIViewController *ctrl = [self parentViewController];
[ctrl dismissModalViewControllerAnimated:YES];

La première fois que je crée un objet (lorsque la liste est vide) je reçois ceci:

Exception a été pris au cours du traitement du changement de base de données: [valueForUndefinedKey:]: le Groupe d'entité est la valeur clé de codage conforme à la clé « (null) ».

Si je remplir le champ « nom » avant de mettre la boîte de dialogue, je suis en mesure d'ajouter la première entité avec succès:

[newManagedObject setValue: @ "Nouveau groupe" forKey: @ "nom"]; // cela fonctionne

J'utilise NSFetchedResultsController pour gérer l'affichage du tableau BTW.

Merci!

Était-ce utile?

La solution 2

Yarr ... désolé les gars, il était en fait dans ma fonction didChangeObject:atIndexPath:forChangeType:newIndexPath: hâte copié d'ailleurs. Apparemment, une exception levée ici peut s'obscurcie à l'intérieur de la méthode save:.

Autres conseils

Dans votre premier bloc de code, la troisième ligne de code semble être hors contexte. Je ne sais pas s'il y a quelque chose qui pourrait contribuer.

En second lieu, la meilleure façon de vous procurer un NSManagedObject dans un NSManagedObjectContext d'un nom d'entité est d'utiliser le [NSEntityDescription insertNewObjectForEntityName: inManagedObjectContext:]. Sélecteur

Alors, je ferais quelque chose comme:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityName:@"Group" inManagedObjectContext:context];

Vous ne devrez libérer newObject plus, depuis la [NSEntityDescription insertNewObjectForEntityName: inManagedObjectContext:] sélecteur retourne un objet avec un nombre de retenir 0. Aussi, assurez-vous que vous avez NameEditController spécifiant sa propriété ManagedObject comme retenu <. / p>

Pour répondre à votre question réelle, il semble que peut-être vous avez « nom » spécifié comme propriété requise dans votre modèle de données? Une capture d'écran montrant les détails pour « nom » dans votre modèle de données serait utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top