将参数传递给作为参数的选择器

时间:2014-07-23 21:33:48

标签: ios objective-c selector

我有以下方法

-(void)changeLevelWithTimeInterval:(NSTimeInterval)timeInterval withLevel:(NSUInteger)level{

    [NSTimer scheduledTimerWithTimeInterval:timeInterval
                                 target:self
                               selector:@selector(changeLevel:)
                               userInfo:nil
                                repeats:NO];
}

我想用上面方法的level参数调用changeLevel:(NSUInteger)级别方法。

我试图把

[self performSelector:@selector(changeLevel:) withObject:level]

并尝试将此作为参数传递,但它不起作用。

2 个答案:

答案 0 :(得分:2)

performSelector:withObject:将一个指针对象(又名id)作为参数,因此无法传递NSUInteger作为参数,因为NSUInteger是只是一个typedeffed unsigned int。一个特定的解决方法是将级别封装在NSNumber对象中,并在intValue方法中获取NSNumber的{​​{1}}。

可能如下:

changeLevel:

并更改NSNumber *levelNumber = [NSNumber numberWithInt:(int)level]; [self performSelector:@selector(changeLevel:) withObject:levelNumber]; 的签名和实现,如下所示:

changeLevel:

要在间隔后触发该方法,您可以尝试:

-(void)changeLevel:(NSNumber*)levelNumber{
    int level = [levelNumber intValue];
    //do anything you want with the level..
}

而不是直接安排计时器。

答案 1 :(得分:0)

我最终使用以下方法而不是上面的方法来使一切正常工作。

-(void)changeLevelWithTimeInterval:(NSTimeInterval)timeInterval withLevel:(NSUInteger)level{

NSNumber *levelNumber = [NSNumber numberWithInt:(int)level];

[self performSelector:@selector(changeLevel:) withObject:levelNumber afterDelay:timeInterval];
}