Pregunta

Estoy tratando de escribir un simple editor de vista de tabla para una entidad de Datos Básicos. Por desgracia estoy corriendo en problemas.

El error se produce cuando se añade la primera entidad a la mesa. El proceso para llevar el cuadro de diálogo modal es como sigue:

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];

Dentro de NameEditController, tengo esto después de que se pulse el botón Hecho:

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 primera vez que crear un objeto (cuando la lista está vacía) me sale esto:

Excepción fue capturado durante el procesamiento de cambio Core de datos: [valueForUndefinedKey:]: el Grupo entidad no es valor de la clave de codificación compatible para la tecla "(null)".

Si lleno el campo 'nombre' antes de mostrar el diálogo, soy capaz de añadir la primera entidad éxito:

[newManagedObject setValue: @ "nuevo grupo" forKey: @ "nombre"]; // esto funciona

Estoy utilizando NSFetchedResultsController para manejar la vista de tabla BTW.

Gracias!

¿Fue útil?

Solución 2

Yarr ... lo siento chicos, fue en realidad en mi función didChangeObject:atIndexPath:forChangeType:newIndexPath: apresuradamente copiado de otra parte. Al parecer una excepción lanzada aquí puede quedar oculto en el interior del método save:.

Otros consejos

En el primer bloque de código, la tercera línea de código parece estar fuera de contexto. No estoy seguro si hay algo allí que podrían estar contribuyendo.

En segundo lugar, la forma más fácil de conseguirse un NSManagedObject en un NSManagedObjectContext de un nombre de entidad es el uso de la [NSEntityDescription insertNewObjectForEntityName: inManagedObjectContext:]. Selector

Por lo tanto, me gustaría hacer algo como:

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

No necesitará para liberar newObject más, ya que el [NSEntityDescription insertNewObjectForEntityName: inManagedObjectContext:] selector devolverá un objeto con una cuenta de retención de 0. Además, asegúrese de que tiene NameEditController especificando su propiedad managedObject como las retenidas <. / p>

Para hacer frente a su problema real, parece que tal vez usted tiene 'nombre' se especifica como una propiedad requerida en el modelo de datos? Una captura de pantalla que muestra los detalles para el 'nombre' en el modelo de datos ayudaría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top