0

我正在用目标 C 编写一个函数。这就是我得到的:

int rndValue = (((int)arc4random()/0x100000000)*width);
timer1 = [NSTimer scheduledTimerWithTimeInterval:.01 
                                          target:self 
                           [self performSelector:@selector(doItAgain1:)  
                                      withObject:rndValue] 
                                        userInfo:nil
                                         repeats:YES];

选择器调用此方法并传递参数:

-(void)doItAgain1:(int)xValuex{
}

在这个阶段,顶部代码会产生语法错误。Syntax error: 'Expected ] before performSelector'问题是什么?最好的祝福

4

2 回答 2

2

那行可能应该是

timer1 = [NSTimer scheduledTimerWithTimeInterval:.01 
         target:self selector:@selector(doItAgain1:) 
         userInfo:nil repeats:YES];

您不能通过此调用发送方法参数,为此您必须执行以下操作:

NSInvocation *inv = [NSInvocation invocationWithMethodSignature:
    [self methodSignatureForSelector:@selector(doItAgain1:)]];

[inv setSelector:@selector(doItAgain1:)];
[inv setTarget:self];
[inv setArgument:&rndValue atIndex:2];

timer1 = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval).01 
         invocation:inv 
         repeats:YES];
于 2013-01-25T16:56:39.673 回答
1

这会更正确:

[NSTimer scheduledTimerWithTimeInterval:.01 target:self 
                 selector:@selector(doItAgain1:)
                 userInfo:[NSNumber numberWithInt:rndValue] repeats:YES];

另请注意,您以这种方式调用的选择器的语法必须是:

- (void)doItAgain1:(NSTimer*)timer {

   int rndValue = [timer.userInfo intValue];
   ...
}

无法int为此类计时器选择器指定参数,因此无法将其转换为NSNumber对象。

于 2013-01-25T16:54:32.513 回答