2013-04-24 4 views
0

일부 메서드가 완료 될 때까지 기다렸다가 작업을 계속할 수 있습니까 ??다른 메서드 내부 메서드 완료 대기

- (void)loadMoreDataOnBottomOfTableview 
{ 
NSLog(@"LOADING ITEMS ON BOTTOM"); 
[self refreshStream]; 

[self.mainTableView reloadData]; 

... 
} 

그래서 나는 완료 refreshStream 방법을 기다린 후있는 tableview 데이터와 loadMoreDataOnBottomOfTableview (...)의 나머지 부분을 다시로드해야합니다.

+0

해결책을 얻었습니까? –

답변

1

완료 블록을 사용하십시오. 그것이 그들이 디자인 한 것입니다.

이 가이드의 완료 핸들러 섹션을 참조하십시오.

[self performSelectorOnMainThread:@selector(refreshStream) withObject:nil waitUntilDone:YES] 

[self.mainTableView reloadData]; 

참고 그러나이 권장 디자인 패턴 아님을 다음과 같이 http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html

+0

좋은 자습서의 모든 링크 ?? – user1832330

+0

링크를 추가했습니다. –

-1

당신은 performSelectorOnMainThread:withObject:waitUntilDone:를 사용할 수 있습니다. 비동기 호출 콜백을 사용한다 (형식 정의를 사용하여, 바로이 페이지를 체크 아웃 한 후이 당신을 어떻게해야

-(void)refreshStream:(void (^)(void))complete; 

-(void)loadMoreDataOnBottomOfTableview 
{ 
    [self refreshStream:^{ 
      [self.mainTableView reloadData]; 
    }]; 
} 

reloadData

0
[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]; 

이것을 사용하여 메소드를 호출 할 수 있습니다.

0

빠른 답변을 드릴 수 있습니다. 마찬가지로 코드에서 완성 블록을 사용하여 작업을 수행 할 수 있습니다.

class TestClosure 
{ 

func calculateAdditionData() { 

    countNumbers({ (result) -> Void in 

     println("[self refreshStream] completed") 
     //[self.mainTableView reloadData]; 
    }) 
} 


func refreshStream(completion: (() -> Void)!) { 

    //Your refresh code 
    completion() 
} 

} 

완료 블록/완료는 완료 될 때까지 기다리는 적절한 방법입니다.