Это немного поздний ответ, но я думаю, что это обычная ситуация, и ответ определенно не очевиден.
Обычно я наблюдаю за изменением 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"];
}
}
Это, безусловно, не идеально с точки зрения производительности, так как это уведомление будет запускаться каждый раз, когда что-либо в вашем объектном графе изменяется, но я нашел егочтобы быть самым простым способом сделать это.