2012-02-15 3 views
0

다음 코드를 작성하여 NSInvocationOperation에서 UITableView를 다시로드했습니다. 그러나 [tableview reloadData]을 호출 한 후 인터페이스가 오랜 시간 동안 업데이트되지 않습니다.NSOperation에서 UITableView를 다시로드하십시오.

Apple 설명서에 NSOperation 내에서 대리자 메서드가 호출되지 않는다고 나와 있습니다.

NSOperationQueue *queue = [NSOperationQueue new]; 

NSInvocationOperation *operation = [[NSInvocationOperation alloc] 
              initWithTarget:self 
              selector:@selector(connectToServer) 
              object:nil]; 

[queue addOperation:operation]; 
[operation release]; 
[queue autorelease]; 

- (void) connectToServer 
{ 
    ... 
    ... 
    [tableview reloadData]; 
} 

답변

2

문제는 UI 업데이트가 주 스레드에서 발생해야하며 reloadData가 NSOperationQueue를 통해 백그라운드 스레드에서 호출되고 있다는 것입니다.

NSObject 메서드 performSelectorOnMainThread:withObject:waitUntilDone:을 사용하여 주 스레드에서 이러한 업데이트가 발생하는지 확인할 수 있습니다.

- (void) connectToServer 
{ 
    ... 
    ... 
    [tableView performSelectorOnMainThread:@selector(reloadData) 
      withObject:nil 
      waitUntilDone:NO]; 
} 

또한 NSOperationQueue 로컬 변수이어야한다. 이 클래스의 유지 된 속성이어야하며 dealloc에서만 릴리스되어야합니다.

+0

나는 그것을 이미 시도했다. 같은 시간에 ios5에서 출력을 얻는다. 당신이 도움을 줄 수 있습니까? – nameless

관련 문제