Est-il possible d'ajouter des observateurs à des variables simples telles que BOOL ou NSIntegers et de voir quand ils changent?Ajouter un observateur à la variable BOOL
Merci!
Est-il possible d'ajouter des observateurs à des variables simples telles que BOOL ou NSIntegers et de voir quand ils changent?Ajouter un observateur à la variable BOOL
Merci!
Vous observez les clés pour être averti lorsque leur valeur change. Le type de données peut être n'importe quoi. Pour tout ce qui est défini comme une propriété Objective-C (avec @property dans le fichier .h), si vous souhaitez observer une propriété BOOL que vous ajoutez à un contrôleur de vue, procédez comme suit:
dans myViewController.h:
@interface myViewController : UIViewController {
BOOL mySetting;
}
@property (nonatomic) BOOL mySetting;
dans myViewController.m
@implementation myViewController
@synthesize mySetting;
// rest of myViewController implementation
@end
dans otherViewController.m:
// assumes myVC is a defined property of otherViewController
- (void)presentMyViewController {
self.myVC = [[[MyViewController alloc] init] autorelease];
// note: remove self as an observer before myVC is released/dealloced
[self.myVC addObserver:self forKeyPath:@"mySetting" options:0 context:nil];
// present myVC modally or with navigation controller here
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (object == self.myVC && [keyPath isEqualToString:@"mySetting"]) {
NSLog(@"OtherVC: The value of self.myVC.mySetting has changed");
}
}
dans myViewController [self setMySetting: YES]; mettre à jour – mconnors
S'il s'agit de propriétés d'objets, alors oui.
Si elles ne sont pas des propriétés, alors non.
Rien, je ne sais tout simplement pas comment l'utiliser pour chercher un changement dans la valeur de la variable. – Andrei
Corrigez-moi si je me trompe, mais afaik il ne doit pas être une propriété, il peut être 2 méthodes un getter - [boolName] et un setter - set [boolName] qui prendra et renverra un NSNumber –
I ' m fait référence aux variables BOOL d'édition de UIViewControllers. Donc, d'une certaine manière, ce sont des propriétés, mais pas des objets que j'ai faits. – Andrei
Oui; la seule exigence est que l'objet dans lequel ces variables se produisent soit conforme à la valeur-clé pour ces propriétés.
Je crois que vous vouliez dire: Comment obtenir la valeur INT ou BOOL du dictionnaire 'change' si la propriété a changé.
Vous pouvez simplement le faire de cette façon:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqualToString:@"mySetting"])
{
NSNumber *mySettingNum = [change objectForKey:NSKeyValueChangeNewKey];
BOOL newSetting = [mySettingNum boolValue];
NSLog(@"mySetting is %s", (newSetting ? "true" : "false"));
return;
}
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
Existe-t-il une raison spécifique pour laquelle vous reviendriez si vous manipuliez votre variable et n'appeliez pas la super méthode? De cette façon, la super méthode n'est appelée que lorsque KVO est appelée et ce n'est pas votre variable. – Leon
ne l'une de ces réponses vous aider (le mien ou autre)? – XJones