我有以下方法
-(void)changeLevelWithTimeInterval:(NSTimeInterval)timeInterval withLevel:(NSUInteger)level{
[NSTimer scheduledTimerWithTimeInterval:timeInterval
target:self
selector:@selector(changeLevel:)
userInfo:nil
repeats:NO];
}
我想用上面方法的级别参数调用 changeLevel:(NSUInteger)level 方法。
我试过了
[self performSelector:@selector(changeLevel:) withObject:level]
并试图将其作为参数传递,但它不起作用。
最佳答案
performSelector:withObject:
将指针对象(也称为 id
)作为参数,因此无法传入 NSUInteger
。作为参数,作为 NSUInteger
只是一个 typedeffed unsigned int
.一种特殊的解决方法是将关卡封装在 NSNumber
中。对象,并得到 intValue
的 NSNumber
在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..
}
要在间隔后触发该方法,您可以尝试:
[self performSelector:@selector(changeLevel:) withObject:levelNumber afterDelay:timeInterval];
而不是直接安排定时器。
关于ios - 将参数传递给作为参数的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921436/