Наблюдатель получает только уведомления о (определенных) свойствах (определенных) объектов, которые он фактически наблюдает.Он не получает уведомлений о любых других изменениях.
Если я правильно понимаю ваше описание, наблюдатель наблюдает за свойствами одного конкретного объекта документа.Наблюдатель не наблюдает за свойством currentUser
(которое является частью другого объекта).Так что нет, наблюдатель определенно не получит уведомление, если currentUser
изменится.
Однако в KVO возможно инициировать уведомление об изменении свойств, на которые влияет изменение другого свойства.Это обычно используется для вычисляемых свойств:
Представьте себе класс Event
, который имеет свойство чтения / записи startDate
и endDate
, и вычисляемое свойство duration
, которое вычисляет продолжительность на основе начала идата окончания:
- (NSTimeInterval)duration
{
return [[self endDate] timeIntervalSinceDate:[self startDate]];
}
Вы должны настроить этот класс так, чтобы он уведомлял наблюдателей о duration
, когда кто-то изменяет startDate
или endDate
:
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
{
NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
if ([key isEqualToString:@"duration"]) {
keyPaths = [keyPaths setByAddingObjectsFromSet:
[NSSet setWithObjects:@"startDate", @"endDate", nil]
];
}
return keyPaths;
}
Это описаноболее подробно в Руководстве по программированию наблюдения значения ключа .