代码之家  ›  专栏  ›  技术社区  ›  w-m

当多个属性更改时执行操作

  •  1
  • w-m  · 技术社区  · 14 年前

    我目前的执行情况如下:

    @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 回复  |  直到 14 年前
        1
  •  1
  •   Dave DeLong    14 年前

    我认为你吃的是最干净和最像可可的方式。作为记录,观察 self 不是一个糟糕的设计决定。