У меня есть NSManagedObjectContext, в котором у меня есть много подклассов NSManagedObjects, таким образом, что некоторые - контейнеры для других. То, что я хотел бы сделать, наблюдать объект верхнего уровня, который будет уведомлен относительно любых изменений в любом из его свойств, ассоциаций или свойств/ассоциаций любого из объектов, которые он содержит.
Используя 'hasChanges' контекста не дает мне достаточно гранулярности. Объекты 'isUpdated' метод только относятся к данному объекту (и ничто в его ассоциациях). Существует ли удобное (возможно, основанный на KVO) был, я могу наблюдать изменения в контексте, которые ограничены подграфом?
Вам нужно будет прослушать NSManagedObjectContextObjectsDidChangeNotification
, чтобы улавливать все изменения в вашей модели данных. Это можно сделать с помощью следующего кода:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(handleDataModelChange:)
name:NSManagedObjectContextObjectsDidChangeNotification
object:myManagedObjectContext];
, который будет запускать -handleDataModelChange:
при любых изменениях контекста myManagedObjectContext
.
Ваш метод -handleModelDataChange
: будет выглядеть примерно так:
- (void)handleDataModelChange:(NSNotification *)note
{
NSSet *updatedObjects = [[note userInfo] objectForKey:NSUpdatedObjectsKey];
NSSet *deletedObjects = [[note userInfo] objectForKey:NSDeletedObjectsKey];
NSSet *insertedObjects = [[note userInfo] objectForKey:NSInsertedObjectsKey];
// Do something in response to this
}
Как видите, уведомление содержит информацию о том, какие управляемые объекты были обновлены, удалены и вставлены. На основе этой информации вы сможете действовать в ответ на изменения вашей модели данных.