Nstimer的方法有变量

时间:2010-12-29 13:33:41

标签: iphone objective-c nstimer

我有一个包含输入变量的方法,我需要使用NSTimer来安排此方法 不幸的是,当我试图提出这个想法时,我遇到了一些错误 我的代码如下:

我的方法:

-(void)movelabel:(UILabel *)label {
}

我使用以下内容进行安排:

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(movelabel:myLbabeName) userInfo:nil repeats:YES];

但是,我收到了以下错误:

error: expected ':' before ')' token

在其他情况下(没有输入变量的方法的情况我正在调用计时器,如下所示:

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(myMethodNameWithoutVariable) userInfo:nil repeats:YES];

此致

3 个答案:

答案 0 :(得分:2)

您赋予scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:的选择器不会接受任意参数。它应该是没有参数的选择器或具有类型(NSTimer *)的单个参数的选择器。

这意味着您无法使用参数moveLabel:直接呼叫myLbabeName

您可以将userInfo字典与这样的中间方法一起使用:

timerRefNSTimer类变量)

timerRef = [NSTimer scheduledTimerWithTimeInterval:0.1 
                               target:self 
                               selector:@selector(timerMovelabel:) 
                               userInfo:[NSDictionary dictionaryWithObject:myLbabeName 
                                                                    forKey:@"name"]
                                repeats:YES];

- (void)timerMovelabel:(NSTimer *)timer {
    [self movelabel:[[timer userInfo] objectForKey:@"name"]];
}

修改

如果您想停止计时器,请保留对它的引用并致电[timerRef invalidate]

答案 1 :(得分:0)

您需要在参数后添加':',即

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(movelabel:myLbabeName:) userInfo:nil repeats:YES]; 

答案 2 :(得分:-1)

你不能通过选择器传递ur lable作为参数...应该有一个参数,它将是id或没有参数..

这里你必须使用

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(movelabel:) userInfo:nil repeats:YES]; 

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(movelabel) userInfo:nil repeats:YES]; 

如果你使用第一个然后你可以得到你的计时器和行动定义将像

- (void) moveLable :(id)sender {
}

发件人将是计时器。

无论如何你需要你的标签作为参数。如果你在.h文件中声明它,你可以直接访问你的标签。