觀察者僅接收關於它實際觀察的(特定)對象的(特定)屬性的通知。它不會收到有關任何其他更改的通知。
如果我正確理解了你的描述,觀察者正在觀察一個特定文檔對象的屬性。觀察者沒有觀察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;
}
這在Key-Value Observing Programming Guide中有更詳細的描述。
當你嘗試過時發生了什麼? –
正如在下面的答案中所說的,你必須做更多的事情才能通知「受影響」的屬性觀察者。 – Raphael