2011-08-02 6 views
1

다른 함수를 호출하는 함수가 있습니다. 두 번째 함수가 세 번째 함수를 호출하도록합니다. 그들은 모두 첫 번째 함수로 돌아가서 코드를 완성합니다.데이지 체인 함수 호출 (메소드 1은 메소드 2를 호출하고 메소드 2는 메소드 3을 호출)

-(void) select 
{ 
    //do code 
    [self drawMap]; 
} 

-(void) drawMap 
{ 
    //do code 
    [self performSelector:@selector(showActionSheet) withObject:nil afterDelay:2]; 
} 

-(void) showActionSheet 
{ 
    //do code 
} 

하지만 showActionSheet 함수는 호출되지 않고 실행되지 않습니다.

편집 : 내가

[self showActionSheet]; 

[self performSelector:@selector(showActionSheet) withObject:nil afterDelay:2]; 

을 변경하는 경우 그러나 그것은 잘 작동합니다. 하지만 나는 사용자가 맵에 대한 변경 사항을 볼 수 있도록 액션 시트의 표시를 몇 초간 지연시키고 싶다.

답변

0

performSelector:withObject:afterDelay 메서드가 제대로 작동하려면 showActionSheet 메서드에 id 매개 변수를 추가해야한다고 생각합니다.

에 메소드의 서명을 변경해보십시오 :

-(void) showActionSheet:(id) obj { ... } 

그리고 MByD, 당신은 당신의 선택에 콜론을 추가 할 필요가 추가 @로 :

[self performSelector:@selector(showActionSheet:) withObject:nil afterDelay:2]; 
+1

및 "showActionSheet :"에 대한 선택자 – MByD

+0

나는 작동하지 않을까 걱정됩니다. .h 및 .m 파일 (id 매개 변수 추가)에서 함수를 변경하고 함수 호출을 변경하여 ":"을 추가했습니다. 여전히 발사하지 않습니다. – Padin215

0

당신은 스레드에서이 일을하고 있습니까 NSRunLopp는 NSRunLoop이므로 입력을 처리 할 책임이있을뿐만 아니라 시간이 지정된 작업을 수행해야하기 때문에 NSRunLopp이 없습니다.

은 또한 NSRunLoop는, 입력 및 화재 타임 이벤트를 기다릴 수있는 기회를 제공되지 않는다는 것이 가능하다 당신은 다음 NSRunLoop에 다시 을 반환하기 전에 오랜 시간 동안 실행되는 일부 코드가있는 경우 NSRunLoop은 그때까지 아무 작업도 수행하지 않습니다. 당신은 이상한 방법으로 NSRunLoop 당신에게 을 설정 한 대신

- [NSObject performSelector:(SEL)aSelector 
       withObject:(id)anArgument 
       afterDelay:(NSTimeInterval)delay 
        inModes:(NSArray *)modes]; 

를 사용하여 행, 디폴트 (NSDefaultRunLoopMode) 이외의 다른 모드를 시도 할 수 있습니다 경우

또 다른 가능성이다.