当多个属性发生变化时执行操作

时间:2010-10-22 15:53:04

标签: objective-c key-value-coding

我有三个不同的属性,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;
  }
}

它有效,但我希望有一个更容易和更好的解决方案,我目前正在忽略这样的事情。打我!

1 个答案:

答案 0 :(得分:1)

我认为你如何拥有它是关于最干净,最可靠的方式。并且为了记录,观察self并不是一个糟糕的设计决定。