Это упрощенный пример, которого должно хватить для ответа на вопрос.
@interface MyClass: NSObject {
Person *_owner;
}
@property (strong) Person *owner;
@property (readonly) BOOL hasSomething;
@end
@implementation
// other code here like -init
- (void)setOwner:(Person *)newOwner
{
[_owner removeObserver:self forKeyPath:@"stuff"];
_owner = newOwner;
[_owner addObserver:self forKeyPath:@"stuff" options:0 context:NULL];
}
- (Person*)owner
{
return _owner;
}
- (BOOL)hasSomething
{
return owner.stuff > 0;
}
- (void)observeValueForKeyPath:(NSString*)kp ofObject:(id)obj change:(NSDictionary*)ch context:(void*)c
{
if ([kp isEqualtToString:@"stuff"]) {
[self willChangeValueForKey:@"hasSomething"];
[self didChangeValueForKey:@"hasSomething"];
}
}
@end
В моем примере все, что связано с hasSomething
, не уведомляется должным образом об изменении значения. Что мне не хватает?