Comment passer d'un argument à une méthode appelée dans un NSTimer
J'ai une minuterie de l'appel d'une méthode, mais cette méthode prend un paramether:
theTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(timer) userInfo:nil repeats:YES];
devrait être
theTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(timer:game) userInfo:nil repeats:YES];
maintenant cette syntaxe ne semble pas être de droite. J'ai essayé avec NSInvocation, mais j'ai eu quelques problèmes:
timerInvocation = [NSInvocation invocationWithMethodSignature:
[self methodSignatureForSelector:@selector(timer:game)]];
theTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval
invocation:timerInvocation
repeats:YES];
Comment dois-je utiliser Invocation?
Vous devez vous connecter pour publier un commentaire.
Compte tenu de cette définition:
Vous devez utiliser
@selector(timerFired:)
(c'est le nom de la méthode, sans espaces ou les noms d'arguments, mais y compris les colons). L'objet que vous souhaitez passer (game
?) est passé par lauserInfo:
partie:Dans votre méthode de minuteur, vous pouvez ensuite accéder à cet objet via la minuterie de l'objet
userInfo
méthode:Comme @DarkDust souligne,
NSTimer
attend sa cible méthode pour avoir un particulier de la signature. Si pour quelque raison vous ne pouvez pas se conformer à cela, vous pouvez à la place utiliser unNSInvocation
comme vous le suggérez, mais dans ce cas, vous devez l'initialiser avec le sélecteur, la cible et les arguments. Par exemple:Appel
invocationWithMethodSignature
sur sa propre n'est pas tout ça, il a juste crée un objet qui est capable d'être rempli de la bonne manière.Vous pouvez passer
NSDictionary
avec des objets nommés (commemyParamName => myObject
) par le biais deuserInfo
paramètre comme ceciPuis dans
timer:
méthode: