2009-04-03 10 views
6

RootViewController로 UITableViewController가 있습니다. RootViewController의 스레드에서 시작하는 다른 스레드에서 얻은 데이터에 따라 테이블에 행을 추가해야합니다. 다른 스레드에서 내 RootViewController의 스레드로 되돌아 가면 업데이트 된 데이터가 있지만 TableView를 업데이트 할 수 없습니다. [self.tableview reloadData]; 메서드를 호출했지만 작동하지 않는 것 같습니다. 또한 [self.tableview setNeedsDisplay] 전화를 시도했지만 성공하지 못했습니다. 새 데이터로 TableView를 어떻게 업데이트합니까?UITableView를 업데이트 할 수 없습니다.

In my RootViewController Class I have: 

- (void) reload { 

for(int i=0;i<[camDetails count];i++) 
{ 
    cCameraInformation *obj = [[cCameraInformation alloc] init]; 
    obj = [camDetails objectAtIndex:i]; 
    NSString *tString = [[NSString alloc] initWithFormat: @"  Remote  %s  %s",[obj->sCameraid UTF8String],[obj->sCameraid UTF8String]]; 
    [tableEntry addObject:tString]; 
} 
[self.tableView reloadData]; 
} 

그런 다음 지속적으로 데이터를 수신하는 수신 클래스 스레드가 있습니다. 기본 클래스는 NSObject입니다. 그래서, RootViewController 클래스의 인스턴스를 가진 Application Delegate 클래스를 사용하여 수신 스레드에서 RootViewController 클래스의이 재로드 데이터 메소드를 호출했습니다.

performSelectorOnMainThread를 사용하여 위의 메서드를 호출 할 수 없습니다.

답변

12

메인 스레드에서 테이블 뷰 디스플레이/리로딩 테이블 뷰를 업데이트 하시겠습니까? 내가있는 tableview 난 당신이

코드 예제 아래의 메인 UI 스레드에 reloadData 메소드를 호출 할 필요가 알게 된 인터넷 검색에

을 업데이트되지 않은 데이터는 사용자가 스크롤 거기에 있지만까지이며, 동일한 문제에 직면

- (void) getDataOnNewThread 
{ 
    // code here to populate your data source 
    // call refreshTableViewOnMainThread like below: 
    [self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:NO]; 
} 

- (void) refreshTableView 
{ 
    [tableView reloadData]; 
} 
1

numberOfRowsForSection에서 올바른 값을 반환했는지 확인하십시오.

또한 cellForRowAtIndexPath 메소드가이 데이터를 사용하여 셀 내용을 가져 왔는지 확인하십시오.

reloadData 메서드는 다른 스레드가 아니라 주 스레드에서 호출해야합니다.

관련 코드를 게시 할 수 있다면 더 잘 도와 드리겠습니다.

관련 문제