To jest uproszczony przykład, który powinien wystarczyć na pytanie.Jak sygnalizować aktualizację tylko do odczytu, która zależy od właściwości podrzędnych?
@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
W moim przykładzie, cokolwiek związany hasSomething
nie został prawidłowo powiadomiony o zmianie wartości. czego mi brakuje?