2009-03-01 5 views
1

의 반환 값을 얻기이 같은 설정 인 NSTimer가 있습니다NSTimer의 대상

[NSTimer scheduledTimerWithTimeInterval:0.5 target:timerTarget selector:NSSelectorFromString(targetSelector) userInfo:nil repeats:YES]; 
나는 timerTarget 메서드의 반환 값을 얻을 수있는 방법

?

답변

5

반환 값이 없으므로 사용자가 작업을 수행 할 수 없습니다. Quoth

documentation of the scheduledTimerWithTimeInterval::::: method :

선택기는 다음 서명이 있어야합니다 : 이제

- (void)timerFireMethod:(NSTimer*)theTimer 

을, 당신 다르게 다음 방법을 선언 거기에 값을 반환 할 수 있지만, 당신의 방법은 NSTimer가 기대하는 것과 다른 서명을 가지고 있습니다. 이제는 정상적으로 작동하지만 미래에는 작동하지 않을 수도 있습니다. 런타임이 변경되면 언제든지 중단 될 수 있습니다.

NSTimer는 반환 값을 기대하지 않기 때문에 더 많은 정보를받을 수있는 곳이 없으며 어디에서나 전달할 수 있습니다.

아담의 대답에 대한 내 의견에서 말한 것처럼 scheduledTimerWithTimeInterval:::::에 대한 전화는 한 번만 반환되며 (아담이 말했듯이) 즉시 그렇게합니다. 0.5 초마다 하나의 반환 값을 얻지 못하기 때문에 0.5 초마다 하나의 반환 값을 얻지 못합니다. 하나의 반환 값이 인 경우에만 (타이머 당)이 반환됩니다.

타이머 방법에서 알아 낸 정보가 무엇이든 관계없이 해당 정보를 바탕으로 다른 방법으로 정보를 보내거나 메시지를 보내야합니다.

5

반환 값으로 무엇을하고 있습니까? 대상은 0.5 초 후 비동기 적으로 실행됩니다. scheduledTimerWithTimeInterval:target:selector:useInfo:repeats:에 대한 호출이 즉시 반환되고 대상이 실행되지 않습니다. 반환 값 이 실제로는 인 경우 타이머를 사용하지 않고 셀렉터를 정상적으로 호출하십시오.

+0

매 0.5 초마다 반환 값이 필요합니다. 목표는 자주 변경되는 값을 모니터링하고 그 값을 반환하므로 변경이 실제로 발생했는지 확인할 수 있습니다. – macinjosh

+1

그런 다음 타이머 방법의 변경 사항에 대해 조치를 취해야합니다. scheduleTimerWithTimeInterval :::::은 * once * 만 반환한다는 것을 기억하십시오. 타이머를 호출 할 때마다 한 번만 반환됩니다. scheduledTimer ... :::::를 한 번 호출하므로 한 번만 반환됩니다. –

1

Adam의 답변에 따라, 실행이 끝난 후 대상 메서드의 반환 값이 필요하다고 생각되면 대상 메서드 자체에 몇 가지 추가 작업이 지속됩니다.

예를 들어 관심 객체 (self?)에 대한 참조를 전달하기 위해 "userInfo"매개 변수를 사용할 수 있습니다. 그러면 대상 메서드는 값을 반환하는 대신 미리 정의 된 선택기를 사용하여 업데이트 된 값을 self로 보낼 수 있습니다. 당신이 원하는 경우 미래에 무슨 일이 일어나고 당신이 방법은 타이머에 의해 호출되는 사실을 아담의 조언을 받아 고려할 필요가

[[theTimer userInfo] setWhatever:blah]; 

개념적과 : 대상 방법 예를 들어, 같은 뭔가 끝낼 수 있었다 특정 클래스와 워크 플로에 다시 연결하려면 어떻게 든 연결해야합니다.