J'ai trois propriétés différentes, x, y et z. S'ils tournent tous à zéro, je dois faire une action, et si l'un d'entre eux est réglé sur une valeur! = Nil, je dois effectuer une action différente.Effectuer une action lorsque plusieurs propriétés changent
Mon implémentation actuelle est la suivante:
@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;
}
}
Il fonctionne, mais je l'espère, il est beaucoup plus facile et une meilleure solution pour quelque chose comme ça, que je suis actuellement méconnais. Frappez-Moi!
C'est en fait une solution très intelligente. :) –
Eh bien merci, mais observer soi-même semble tout simplement faux pour moi. –
vraiment? Je le fais tout le temps, spécifiquement pour que je puisse conserver mes propriétés '@ synthesize''d, mais je réagis quand les choses changent. N'oubliez pas de vous retirer en tant qu'observateur dans '-dealloc'. –