2012-03-01 4 views
6

У меня этот код:NSTimer userInfo. Как объект переходит к селектору?

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

Но если я paasing в USERINFO класс NSNumber, почему я m принимает таймер?

Спасибо.

ответ

25

Ваш метод действия таймера должен выглядеть следующим образом

-(void)rotateSelectedItem:(NSTimer*)sender 

Вы можете получить в USERINFO делая

NSNumber *userInfo = sender.userInfo; 
2

Вы неправильно поняли подпись селектора, которую вы регистрируете с помощью таймера. Отправитель NSTimer*, а не объект USERINFO, передаваемую в его конструктор:

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

Из документации:

Сообщение для отправки в цель при срабатывании таймера. Селектор должен иметь следующую подпись:

- (void)timerFireMethod:(NSTimer*)theTimer 

 Смежные вопросы

  • Нет связанных вопросов^_^