J'essaie de comprendre comment utiliser les blocs sur iOS. J'ai lu la documentation d'Apple mais, comme d'habitude, elle est vague et incomplète et plusieurs éléments d'information essentiels ne sont pas mentionnés. J'ai également cherché sur Google, sans succès. Voici ce que j'essaie de faire comme exercice pour comprendre cela.
J'ai créé un bloc pour lire une chaîne de caractères et comparer cette chaîne à la lecture précédente. Si les chaînes ne sont pas les mêmes, il renvoie YES, si elles sont les mêmes, il renvoie NO.
C'est comme ça que j'ai fait :
J'ai déclaré ceci sur .h
BOOL (^differentStrings)(void);
J'ai déclaré ceci dans le fichier .m, à l'intérieur de viewDidLoad dans un viewController.
__block NSString * previousString;
__block NSString * currentString;
differentStrings = ^(void){
currentString = [self getString];
NSLog(@"%@", currentString); // not printing anything on console
if (![currentString isEqualToString:previousString]) {
previousString = currentString;
return YES;
} else {
return NO;
}
};
Voici comment je l'utilise : J'ai un fil qui fait ça :
if (differentStrings)
NSLog (@"strings are different);
Ce sont les problèmes que j'ai :
- le bloc retourne toujours OUI (les chaînes sont différentes)
- Je ne suis pas à l'aise pour déclarer ceci dans videDidLoad. Comment dois-je le déclarer pour pouvoir l'utiliser globalement comme une méthode ? Dois-je le placer comme je le ferais avec une méthode ?
- J'appelle une méthode "getString" à l'intérieur du bloc. Est-ce que c'est correct ?
- Je trouve étrange de déclarer les variables de bloc dans .m. D'après ce que je vois, je devrais déclarer les variables de bloc dans .h et ensuite les utiliser dans .m. J'ai essayé de le faire, mais j'ai reçu une erreur.
- J'ai configuré un point de débogage sur la première ligne du bloc mais il ne s'arrête pas là ;
- La ligne NSlog à l'intérieur du bloc n'imprime rien. Le bloc n'est-il pas appelé ?
Pouvez-vous m'aider ?