我有以下方法
-(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]
并尝试将此作为参数传递,但它不起作用。
答案 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];
}