Existe-t-il un moyen d'envoyer BOOL dans le sélecteur?
[self performSelector:@selector(doSomething:) withObject:YES afterDelay:1.5];
Ou devrais-je utiliser NSInvocation? Quelqu'un pourrait-il écrire un échantillon s'il vous plaît?
Existe-t-il un moyen d'envoyer BOOL dans le sélecteur?
[self performSelector:@selector(doSomething:) withObject:YES afterDelay:1.5];
Ou devrais-je utiliser NSInvocation? Quelqu'un pourrait-il écrire un échantillon s'il vous plaît?
vous pouvez utiliser NSNumber pour encapsuler les types de bools:
BOOL myBool = Yes;
NSNumber *passedValue = [NSNumber numberWithBool:myBool];
[self performSelector:@selector(doSomething:) withObject:passedValue afterDelay:1.5];
et dans le sélecteur, pour obtenir la valeur booléenne, vous utilisez:
BOOL value = [recievedObject boolValue];
Dans le cas où vous ne pouvez pas modifier la signature de la méthode cible pour accepter un NSNumber
à la place d'un BOOL
vous pouvez utiliser NSInvocation
au lieu de performSelector
:
MyTargetClass* myTargetObject;
BOOL myBoolValue = YES; // or NO
NSMethodSignature* signature = [[myTargetObject class] instanceMethodSignatureForSelector: @selector( myMethodTakingBool: )];
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: signature];
[invocation setTarget: myTargetObject];
[invocation setSelector: @selector( myMethodTakingBool: ) ];
[invocation setArgument: &myBoolValue atIndex: 2];
[invocation invoke];
La manière la plus simple est la suivante:
Si vous avez la méthode
-(void)doSomething:(BOOL)flag
et souhaitez effectuerSelecor avec flag = NO use
[object performSelector:@selector(doSomething:) withObject:nil];
En cas de flag = YES, vous pouvez envoyer n'importe quel objet, par exemple, @YES - numéro de bool
[object performSelector:@selector(doSomething:) withObject:@YES];
Remarque: n'utilisez pas @NO! Seul nil sera interprété comme NON dans votre méthode avec l'argument bool.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.