如何将参数传递给 NSTimer 中调用的方法 [英] How to pass an argument to a method called in a NSTimer

查看:31
本文介绍了如何将参数传递给 NSTimer 中调用的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个定时器调用一个方法,但这个方法需要一个参数:

I have a timer calling a method but this method takes one paramether:

theTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(timer) userInfo:nil repeats:YES];

应该是

theTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(timer:game) userInfo:nil repeats:YES];

现在这个语法似乎不对.我尝试使用 NSInvocation 但我遇到了一些问题:

now this syntax doesn't seems to be right. I tried with NSInvocation but I got some problems:

timerInvocation = [NSInvocation invocationWithMethodSignature:
        [self methodSignatureForSelector:@selector(timer:game)]];

theTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval
        invocation:timerInvocation
        repeats:YES];

我应该如何使用 Invocation?

How should I use Invocation?

推荐答案

鉴于此定义:

- (void)timerFired:(NSTimer *)timer
{
   ...
}

然后您需要使用 @selector(timerFired:)(这是没有任何空格或参数名称的方法名称,但包括冒号).您要传递的对象 (game ?) 通过 userInfo: 部分传递:

You then need to use @selector(timerFired:) (that's the method name without any spaces or argument names, but including the colons). The object you want to pass (game ?) is passed via the userInfo: part:

theTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval 
                                            target:self 
                                          selector:@selector(timerFired:) 
                                         userInfo:game
                                          repeats:YES];

在你的定时器方法中,你可以通过定时器对象的userInfo方法访问这个对象:

In your timer method, you can then access this object via the timer object's userInfo method:

- (void)timerFired:(NSTimer *)timer
{
    Game *game = [timer userInfo];
    ...
}

这篇关于如何将参数传递给 NSTimer 中调用的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆