2012-06-02 18 views
5

Esto es realmente molesto conmigo. En Objective-C, tengo una entidad Item con un atributo booleano Deleted. Me gustaría ser capaz de establecer el valor de Deleted a SÍ o 1.¿Por qué no puedo actualizar el valor booleano del atributo de mi entidad de datos central?

Este es mi código:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSString *itemID = [[fetchedObjects objectAtIndex:(int)[currentTable selectedRow]] valueForKey:@"ItemID"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ItemID = %@", itemID]; 
[fetchRequest setPredicate:predicate]; 

NSError *error = nil; 
Item *objectToDelete = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] objectAtIndex:0]; 
if (objectToDelete == nil) { 
    NSLog(@"ERROR"); 
} 

[fetchRequest release]; 

[objectToDelete setValue:[NSNumber numberWithBool:YES] forKey:@"Deleted"]; 

[managedObjectContext save:&error]; 

Algo a destacar es que soy capaz de cambiar con éxito diferentes atributos; por ejemplo: agrego la cadena -DEL al final de los atributos Item y Name. Cuando veo una tabla de datos, las cadenas para esos valores se actualizan correspondientemente, sin embargo, el valor de Deleted continúa siendo 0.

+0

¿Cómo se ve la descripción de su entidad? ¿Utiliza tipos integrales nativos? ¿Qué obtiene cuando llama a valueForKey? @ "Eliminado" –

+0

El archivo de encabezado de mi entidad para Artículo tiene NSNumber * Suprimido. En el modelo de datos básicos aparece como booleano. Cuando invoco a valueForKey: @ "Eliminado" después de haber cambiado ed it, imprime "0". – Rail24

+0

¿Su atributo se declara como transitorio? Luego, intente poner una declaración de registro antes y después de la actualización. Házmelo saber. –

Respuesta

9

Recomiendo encarecidamente que se use un nombre diferente para este atributo. NSManagedObject ya tiene métodos estrechamente relacionados con este nombre (en particular -isDeleted), lo que potencialmente puede provocar colisiones con el nombre de atributo personalizado. Como the documentation para NSPropertyDescription dice:

Tenga en cuenta que un nombre de propiedad no puede ser el mismo que cualquier sin parámetros nombre del método de NSObject o NSManagedObject. Por ejemplo, no puede dar a una propiedad el nombre "descripción". Hay cientos de métodos en NSObject que pueden entrar en conflicto con los nombres de propiedades, y esta lista puede crecer sin previo aviso desde marcos u otras bibliotecas. Usted debe evitar palabras muy generales (como "fuente” y ‘color’) y las palabras o frases que se solapan con los paradigmas de cacao (tales como ‘isEditing’ y ‘objectSpecifier’).

hace el código ¿funciona si cambia el nombre de su propiedad a algo que no colisione con ningún otro nombre de propiedad/método?

+0

Ese es el truco. Cambié el atributo "Eliminado" a "DeletedBoolean". Un par de reflexiones en el código y funciona perfectamente ahora. Muchas gracias. – Rail24

+0

Más de una hora intenté averiguar por qué no puedo establecer la propiedad "eliminada" en "1", gracias. – daleijn

Cuestiones relacionadas