NSTimer userInfo. ¿Cómo pasa el object al selector?

Tengo este código:

-(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; } 

El objective es comenzar a rotar una vista mientras el usuario tiene un button. Cuando el usuario lo suelte, el timer se detendrá.

Pero estoy dando esto:

– [__ NSCFTimer intValue]: selector no reconocido enviado a la instancia 0x4ae360

Pero si estoy paasing en userInfo una class NSNumber, ¿por qué recibo el timer?

Gracias.

    Su método de acción del timer debería verse así

     -(void)rotateSelectedItem:(NSTimer*)sender 

    Puede get en el userInfo haciendo

     NSNumber *userInfo = sender.userInfo; 

    Has entendido mal la firma del selector que registras con el timer. El remitente es NSTimer* , no el object userInfo que pasa a su constructor:

     -(void)rotateSelectedItem:(NSTimer*)sender { float currAngle = [selectedItem currentRotation]; if ([sender.userInfo intValue] == RDUtilitiesBarRotationLeft) { [selectedItem rotateImage:currAngle - 1]; } else { [selectedItem rotateImage:currAngle + 1]; } } 

    De la documentation:

    El post para enviar al objective cuando se dispara el timer. El selector debe tener la siguiente firma:

     - (void)timerFireMethod:(NSTimer*)theTimer