我有一个包含输入变量的方法,我需要使用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];
此致
答案 0 :(得分:2)
您赋予scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
的选择器不会接受任意参数。它应该是没有参数的选择器或具有类型(NSTimer *)
的单个参数的选择器。
这意味着您无法使用参数moveLabel:
直接呼叫myLbabeName
。
您可以将userInfo
字典与这样的中间方法一起使用:
(timerRef
是NSTimer
类变量)
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文件中声明它,你可以直接访问你的标签。