Выполните действие при изменении нескольких свойств - PullRequest
1 голос
/ 22 октября 2010

У меня есть три разных свойства: x, y, z.Если все они обнуляются, мне нужно выполнить действие, и если для одного из них задано значение! = 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;
  }
}

Это работает, но я надеюсь, что есть что-то вроде этого, гораздо более легкое и лучшее решение, которое я сейчас пропускаю.Ударь меня!

1 Ответ

1 голос
/ 22 октября 2010

Я думаю, что у вас есть самый чистый и самый похожий на Какао способ, которым вы могли бы.И, к сведению, соблюдение self не является плохим дизайнерским решением.

...