Pergunta

Eu tenho um NSTIMER que é configurado como este:

[NSTimer scheduledTimerWithTimeInterval:0.5 target:timerTarget selector:NSSelectorFromString(targetSelector) userInfo:nil repeats:YES];

Como posso obter o valor de retorno do timerTarget método?

Foi útil?

Solução

Você não pode, porque não há valor de retorno.

Quoth the Documentação do scheduledTimerWithTimeInterval::::: método:

O seletor deve ter a seguinte assinatura:

- (void)timerFireMethod:(NSTimer*)theTimer

Agora você poderia Declare seu método de maneira diferente e, em seguida, retorne um valor nele, mas seu método tem uma assinatura diferente do que o NSTIMER espera. Isso funcionará bem agora, mas não é garantido que funcione no futuro - ele pode quebrar a qualquer momento, especialmente uma mudança no tempo de execução.

Além disso, como o NSTIMER não espera um valor de retorno, ele não tem disposições para receber um e passá -lo em qualquer lugar.

Além disso, como eu disse no meu comentário sobre a resposta de Adam, sua chamada para scheduledTimerWithTimeInterval::::: Retorna apenas uma vez e (como Adam disse), o faz imediatamente. Você não recebe um valor de retorno a cada 0,5 segundos, porque não recebe um retorno a cada 0,5 segundos - você recebe um retorno (por temporizador).

Qualquer que seja a informação que você esteja descobrindo no seu método do timer, você precisa agir sobre ela ou enviar uma mensagem com as informações de lá para outro método.

Outras dicas

O que você está fazendo com o valor de retorno? O alvo é executado de forma assíncrona 0,5 segundos depois. A chamada para scheduledTimerWithTimeInterval:target:selector:useInfo:repeats: Retorna instantaneamente, momento em que o alvo não foi executado. Se você realmente precisa do valor de retorno agora mesmo, então não se preocupe com um cronômetro e apenas ligue para o seletor normalmente.

Seguindo a boa resposta de Adam, se você acha que precisa do valor de retorno do método direcionado após o término da execução, o que você provavelmente deseja fazer é ter o próprio método direcionado perpetuar alguma ação adicional.

Por exemplo, você pode usar o parâmetro "userInfo" para transmitir uma referência ao objeto interessado (self?). O método direcionado poderia então, em vez de retornar um valor, enviar o valor atualizado para si mesmo com um seletor pré-organizado. Por exemplo, em seu método de destino, você pode terminar com algo como:

[[theTimer userInfo] setWhatever:blah];

Conceitualmente, você precisa seguir o conselho de Adam e considerar o fato de que o método chamado pelo timer está acontecendo no futuro e se você deseja se conectar de volta a uma classe específica e seu fluxo de trabalho, precisa conectá -lo de alguma forma.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top