2010-02-16 9 views
8

Ich verfolge meine 'Objekte' mit der isUpdated-Instanzmethode der NSManagedObject-Klasse.NSManagedObject: isUpdated und isInserted

Wenn ich ein vorhandenes Objekt modifiziere, funktioniert es.

Wenn ich ein neues Objekt mit zum Beispiel zu erstellen:

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

ich nicht die isUpdated verwenden können, muss ich die isInserted verwenden.

Das funktioniert, aber was ich überprüfen möchte, wenn das Objekt mit neuen Daten geändert wurde.

isInserted FALSE zurück, egal, ob das Objekt geändert wurde oder nicht, ist es lediglich wichtig, wenn eingefügt wurde oder nicht ...

was kann ich verwenden? Ich kann den Anfangszustand der Objekteigenschaften verfolgen, aber ich würde den isUpdated Ansatz bevorzugen.

danke !!!

r.

Antwort

15

Ich bin nicht sicher, ob ich völlig verstehe Ihre Frage, aber wenn Sie überprüfen möchten, ob Ihr mit einem nicht gesicherten neuen NSManagedObject arbeiten, können Sie das tun, indem Sie einen kleinen Kategorie für NSManagedObject schreiben:

@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 

Wenn Sie ein neues verwaltete Objekt erstellt haben mit:

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

können Sie die -isNew Methode verwenden, um zu überprüfen, ob sie gespeichert worden ist oder nicht.

1

isInserted zeigt an, ob das Objekt "neu" ist (neu in NSManagedObjectContext eingefügt). Ich denke, was Sie brauchen, ist Methode haschanges (es ist auf NSManagedObject und auch auf NSManagedObjectContext) ...

BOOL someChangeHappendToObject = [myObject hasChanges]; 

Kasse NSManagedObject hasChanges documentation