est-il possible d'ajouter des observateurs à des variables simples telles que les bools ou les nsintegers et voir quand ils changent? P>
merci! p>
4 Réponses :
S'ils sont des propriétés d'objets, alors oui. p>
S'ils ne sont pas des propriétés, alors non. P>
Rien, je ne sais tout simplement pas comment l'utiliser pour rechercher une modification de la valeur de la variable.
Corrigez-moi si je me trompe, mais cela n'a pas besoin d'être une propriété, il peut s'agir de 2 méthodes d'un getter - [boolname] et d'un setter - set [boolname] qui prendra et retournera un nombre de nsnumber.
Je parle en fait de la modification des variables Bool d'UIViewControlers. Donc, d'une certaine manière, ils sont des propriétés, mais aucun objet que j'ai fait.
Ensuite, oui - si ce sont des propriétés vont et observer (en supposant qu'ils sont conformes à une valeur essentielle, mais je viens de le considérer comme lis qu'ils seront!) - Avez-vous essayé de les observer? Que se passe-t-il quand tu fais?
Il me semble que je ne peux pas ajouter un observateur ... Si j'essaie de dire [auto.editing Addobserver], il n'y aura pas d'achèvement automatique.
Non, mais vous pouvez ajouter un observateur à soi-même, en passant en modifiant comme chemin :)
oui; La seule exigence est que l'objet dans lequel ces variables se produisent sont conformes à la valeur clé pour ces propriétés. P>
Vous observez les clés à notifier 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), il est prêt à vous y aller si vous souhaitez observer une propriété BOOL, vous ajoutez à un contrôleur d'affichage, vous le faites comme suit:
dans myViewController .h: p> dans myViewController.m p> dans dorerviewcontroller.m: p>
Je crois ce que vous vouliez dire était: comment obtenir une valeur int ou bool du dictionnaire "changement" si la propriété a changé.
Vous pouvez simplement le faire de cette façon: P>
- (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];
}
Y a-t-il une raison spécifique pour laquelle vous reviendrez si vous avez géré votre variable et n'appelle 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.
Est-ce que l'une de ces réponses vous a aidé (mine ou autre)?