2010-02-16 18 views
8

Llevo un registro de mis 'objetos' utilizando el método de instancia isUpdated de NSManagedObject Class.NSManagedObject: isUpdated and isInserted

Cuando estoy modificando un objeto existente, funciona.

Si se crea un nuevo objeto utilizando, por ejemplo:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:managedObjectContext] 

no puedo usar el isUpdated, tengo que usar el isInserted.

Esto funciona, pero lo que quiero comprobar, si el objeto ha sido modificado con nuevos datos.

isInserted devolverá FALSO, no importa si el objeto ha sido cambiado o no, sólo tenga cuidado si se ha insertado o no ...

lo puedo usar? Puedo rastrear el estado inicial de las propiedades del objeto, pero preferiría el enfoque isUpdated.

gracias !!!

r.

Respuesta

15

No estoy seguro de entender completamente su pregunta, sin embargo, si usted quiere comprobar si su trabajo no guardado con un nuevo NSManagedObject, que puede hacer que al escribir una pequeña categoría de NSManagedObject:

@interface NSManagedObject(Utility) 

/** 
Returns YES if this managed object is new and has not yet been saved in the persistent store. 
*/ 
- (BOOL)isNew; 

@end 

@implementation NSManagedObject(Utility) 

- (BOOL)isNew { 
    NSDictionary *vals = [self committedValuesForKeys:nil]; 
    return [vals count] == 0; 
} 

@end 

Si ha creado un nuevo objeto administrado usando:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:managedObjectContext] 

usted puede utilizar el método -isNew para comprobar si se ha guardado o no.

1

isInserted indica si el objeto es "nuevo" (recién insertado en NSManagedObjectContext). Creo que lo que necesita es hasChanges método (está en NSManagedObject y también en NSManagedObjectContext) ...

BOOL someChangeHappendToObject = [myObject hasChanges]; 

checkout NSManagedObject hasChanges documentation

Cuestiones relacionadas