這是一個遲到的答案,但我認爲這是一個普遍的情況,答案肯定不是很明顯。
我通常會注意managedObjectContext進行更改,然後檢查是否有任何更改的對象是我想要查找的對象。所以,在你NSManagedObject
子類:
// We need to register for the notification in both awakeFromFetch
// AND awakeFromInsert, since either one could be called, depending on
// if the object was previously-created or not
- (void)awakeFromFetch {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(managedObjectContextDidChange:) name: NSManagedObjectContextObjectsDidChangeNotification object:[self managedObjectContext]];
}
- (void)awakeFromInsert {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(managedObjectContextDidChange:) name: NSManagedObjectContextObjectsDidChangeNotification object:[self managedObjectContext]];
}
- (void)managedObjectContextDidChange:(NSNotification *)notification {
// Get a set containing ALL objects which have been changed
NSSet *insertedObjects = [[notification userInfo] objectForKey:NSInsertedObjectsKey];
NSSet *updatedObjects = [[notification userInfo] objectForKey:NSUpdatedObjectsKey];
NSSet *deletedObjects = [[notification userInfo] objectForKey:NSDeletedObjectsKey];
NSSet *changedObjects = [insertedObjects setByAddingObjectsFromSet:updatedObjects];
changedObjects = [changedObjects setByAddingObjectsFromSet:deletedObjects];
if ([changedObjects intersectsSet:[self versions]]) {
[self willChangeValueForKey:@"appCast"];
[self didChangeValueForKey:@"appCast"];
}
}
這當然是從性能的角度來看並不理想,因爲該通知要解僱你的對象圖的每一次變化什麼,但我發現它是最直接的方式來實現這一點。
要清楚:`appCast`是`App`上的一個屬性,當您更改`Version`上的值時(可能通過`versions`屬性或類似的`App`鏈接)appCast `財產不發送變更通知? – Alex 2009-07-26 04:10:54