Pergunta

Eu tenho 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;
}

O objetivo é começar a girar uma visualização enquanto o usuário segura um botão.Quando o usuário liberar o cronômetro irá parar.

Mas estou dando isso:

-[__NSCFTimer intValue]:seletor não reconhecido enviado para instância 0x4ae360

Mas se estou inserindo userInfo uma classe NSNumber, por que estou recebendo o cronômetro?

Obrigado.

Foi útil?

Solução

Seu método de ação do temporizador deve ser parecido com este

-(void)rotateSelectedItem:(NSTimer*)sender

Você pode acessar o userInfo fazendo

NSNumber *userInfo = sender.userInfo;

Outras dicas

Você entendeu mal a assinatura do seletor que você registra no cronômetro.O remetente é NSTimer*, não o objeto userInfo que você passa para seu construtor:

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

Da documentação:

A mensagem a ser enviada ao destino quando o cronômetro for acionado.O seletor deve ter a seguinte assinatura:

- (void)timerFireMethod:(NSTimer*)theTimer
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top