[英]NSTimer userInfo. How object is passing to the selector?
我有这个代码:
-(void)startRotation:(RDUtilitiesBarRotation)mode {
rotationTimer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(rotateSelectedItem:) userInfo:[NSNumber numberWithInt:mode] repeats:YES];
}
-(void)rotateSelectedItem:(NSNumber*)sender {
float currAngle = [selectedItem currentRotation];
if ([sender intValue] == RDUtilitiesBarRotationLeft) {
[selectedItem rotateImage:currAngle - 1];
}
else {
[selectedItem rotateImage:currAngle + 1];
}
}
-(void)stopRotation {
[rotationTimer invalidate];
rotationTimer = nil;
}
当用户按住按钮时,目标开始旋转视图。 当用户释放它时,计时器将停止。
但我这样说:
- [__ NSCFTimer intValue]:无法识别的选择器发送到实例0x4ae360
但是,如果我在userInfo中调用一个NSNumber类,为什么我要收到定时器?
谢谢。
您的计时器操作方法应如下所示
-(void)rotateSelectedItem:(NSTimer*)sender
您可以通过执行来获取userInfo
NSNumber *userInfo = sender.userInfo;
您误解了使用计时器注册的选择器的签名。 发件人是NSTimer*
,而不是传递给其构造函数的userInfo对象:
-(void)rotateSelectedItem:(NSTimer*)sender
{
float currAngle = [selectedItem currentRotation];
if ([sender.userInfo intValue] == RDUtilitiesBarRotationLeft)
{
[selectedItem rotateImage:currAngle - 1];
}
else
{
[selectedItem rotateImage:currAngle + 1];
}
}
从文档:
定时器触发时发送到目标的消息。 选择器必须具有以下签名:
- (void)timerFireMethod:(NSTimer*)theTimer
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.