2011-03-01 2 views
0

나는 withObject 매개 변수 값을 변경해야하는 상황에 처해있다. 다음 코드를 가지고 있습니다 :performSelector의 withObject 매개 변수가 호출되기 전에이를 변경합니다!

[self performSelector:@selector(refreshScore:) withObject:self.args afterDelay:7.0]; 

self.args는 "refreshScore"의 초기 값을 가진 NSString입니다. refreshScore가 트리거 될 때 아래에 표시된 것처럼 매개 변수에 값이있는 경우에만 전달되도록하십시오.

-(void) refreshScore:(NSString *) argument 
{ 
    if([argument length] == 0) return; 
} 

이 작업은 정상적으로 작동합니다. 하지만 CCMenuItemImage가있는 CCMenu가 있습니다. CCMenuItemImage를 클릭하면 self.args = @ ""; (빈). 그러나 refreshScore 메소드에 영향을 미치지 않으며 self.args가 초기 값으로 채워지는 것처럼 동작합니다.

CCMenuItemImage의 선택기가 별도의 스레드에 실행됩니까?

답변

0

두 개의 중단 점 (CCMenuItemImage 클릭 콜백 및 performSelector가 호출되는 메서드에서)을 놓고 먼저 트리거되는 것을 확인합니다. 99 % 모든 것이 괜찮 으면 첫 번째 사례가됩니다. 값이 실제로 변경되었는지 확인하십시오.

+0

감사합니다! 체크해 보니 선택기 메서드 인 refreshScore가 캐시 된 것이거나 나중에 매개 변수와 함께 처리하기 위해 대기열에 넣은 것처럼 보입니다. 인수 매개 변수 대신 공용 속성을 사용하면 제대로 작동합니다. 감사! – azamsharp

관련 문제