2010-02-16 13 views
8

Tengo traccia dei miei "oggetti" utilizzando il metodo di istanza isUpdated della classe NSManagedObject.NSManagedObject: isUpdated e isInserted

Quando modifico un oggetto esistente, funziona.

Se creo un nuovo oggetto usando per esempio:

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

non posso usare l'isUpdated, devo usare l'isInserted.

Questo funziona, ma quello che voglio verificare, se l'oggetto è stato modificato con nuovi dati.

isInserted restituirà FALSE, non importa se l'oggetto è stato modificato o no, è solo prendere cura se è stato inserito o meno ...

cosa posso usare? Posso tenere traccia dello stato iniziale delle proprietà dell'oggetto, ma preferirei l'approccio isUpdated.

grazie !!!

r.

risposta

15

io non sono sicuro di aver capito completamente la tua domanda, tuttavia, se si vuole verificare se il lavoro non salvato con una nuova NSManagedObject, è possibile farlo scrivendo una piccola categoria per 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 

Se hai creato un nuovo oggetto gestito utilizzando:

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

è possibile utilizzare il metodo -isNew per verificare se è stato salvato o meno.

1

isInserted indica se l'oggetto è "nuovo" (appena inserito in NSManagedObjectContext). Penso che quello che vi serve è il metodo HasChanges (è su NSManagedObject e anche sulla NSManagedObjectContext) ...

BOOL someChangeHappendToObject = [myObject hasChanges]; 

checkout NSManagedObject hasChanges documentation

Problemi correlati