Как я могу отслеживать/наблюдать все изменения в подграфе?

У меня есть NSManagedObjectContext, в котором у меня есть много подклассов NSManagedObjects, таким образом, что некоторые - контейнеры для других. То, что я хотел бы сделать, наблюдать объект верхнего уровня, который будет уведомлен относительно любых изменений в любом из его свойств, ассоциаций или свойств/ассоциаций любого из объектов, которые он содержит.

Используя 'hasChanges' контекста не дает мне достаточно гранулярности. Объекты 'isUpdated' метод только относятся к данному объекту (и ничто в его ассоциациях). Существует ли удобное (возможно, основанный на KVO) был, я могу наблюдать изменения в контексте, которые ограничены подграфом?

58
задан Dan Beaulieu 28 January 2017 в 20:27
поделиться

1 ответ

Вам нужно будет прослушать 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
}

Как видите, уведомление содержит информацию о том, какие управляемые объекты были обновлены, удалены и вставлены. На основе этой информации вы сможете действовать в ответ на изменения вашей модели данных.

129
ответ дан 24 November 2019 в 18:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: