1

x、y、zの3つの異なるプロパティがあります。それらがすべてnilになったら、アクションを実行する必要があり、そのうちの1つが値!= nilに設定されている場合は、別のアクションを実行する必要があります。

私の現在の実装は次のとおりです。

@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;
  }
}

それは機能しますが、私が現在見落としているこのようなものに対して、はるかに簡単でより良い解決策があることを願っています。ピンときた

4

1 に答える 1

1

私はあなたがそれをどのように持っているかはあなたができる最もきれいで最もココアのような方法についてだと思います。そして、記録として、観察selfは悪い設計上の決定ではありません。

于 2010-10-22T17:19:08.790 に答える