设置NSTimer时是否可以在方法中给出参数?我想创建如下内容:
[NSTimer [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(moveParticle:imageView) userInfo:nil repeats:YES];
其中“imageView”是方法的参数。它给了我一个错误,说它在“imageView”之后的parathesis之后正在期待一个分号。
任何帮助?
答案 0 :(得分:3)
您想使用userInfo发送参数。查看有关如何使用它的文档。您只需使您的函数采用单个NSTimer参数,然后计时器将自行返回,您可以读取其userInfo字典。
答案 1 :(得分:1)
这就是userInfo参数的用途。您可以将imageView作为userInfo传递,并将其作为选择器提供给所需的方法(NSView?)。 e.g:
- (void)moveParticle:(NSTimer*)theTimer
{
NSView* imageView = (NSView*)[theTimer userInfo);
...
}
另一种方法(在这里可能更有用 - 因为你的目标是自我),将使imageView成为iVar并在moveParticle中访问它。
答案 2 :(得分:0)
请参阅duplicate thread:
您需要使用+[NSTimer scheduledTimerWithTimeInterval:invocation:repeats:]
代替。默认情况下,用于触发计时器的选择器需要一个参数。如果您需要其他内容,则必须创建一个NSInvocation对象,而计时器将使用该对象。
一个例子:
NSMethodSignature * mSig = [NSMutableArray instanceMethodSignatureForSelector:@selector(moveParticle:)];
NSInvocation * myInvocation = [NSInvocation invocationWithMethodSignature:mSig];
[myInvocation setTarget:myArray];
[myInvocation setSelector:@selector(moveParticle:)];
[myInvocation setArgument:&imageView atIndex:2]; // Index 2 because first two arguments are hidden arguments (self and _cmd). The argument has to be a pointer, so don't forget the ampersand!
NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 invocation:myInvocation repeats:true];