1
我有三個不同的屬性,x,y,z。如果他們全都轉爲零,我需要採取行動,如果其中一個設置爲值!=零,我必須執行不同的操作。多個屬性改變時執行動作
我目前實行的是以下幾點:
@property (readonly) NSNumber *meta;
+ (NSSet *)keyPathsForValuesAffectingMeta
{
return [NSSet setWithObjects:@"x", @"y", @"z", nil];
}
- (void)awakeFromNib
{
[self addObserver:self forKeyPath:@"meta" options:0 context:NULL];
}
- (NSNumber *)meta
{
BOOL meta = x || y || z;
return [NSNumber numberWithBool:meta];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
BOOL meta = [[self meta] boolValue];
if (meta != _flags.meta) {
if (meta) {
[self showSomeStuff];
}
else {
[self hideSomeStuff];
}
_flags.meta = meta;
}
}
它的工作原理,但我希望有這樣的事情更方便,更好的解決方案,我目前的眺望。打我!
這實際上是一個非常聰明的解決方案。 :) – 2010-10-22 16:00:54
非常感謝,但觀察自己似乎只是對我錯了。 – 2010-10-22 16:03:48
真的嗎?我一直這樣做,特別是我可以保留我的'@綜合'屬性,但是當事情發生變化時仍然會做出反應。請不要忘記在'-dealloc'中以觀察者身份移除自己。 – 2010-10-22 16:08:06