2012-02-07 9 views
1

내 iOS5 애플리케이션에서 progressLabelArray에 저장된 NSString 값을 기반으로 셀을 표시하는 UITableView가 있습니다. 내 하위 레이어에서 콜백을 등록하고 C 함수에서 수신합니다. 여기서 UI 업데이트 메소드를 자체 참조를 통해 호출 할 수 있습니다.모든 콜백에서 UITableView 새로 고침/새로 고침

static void callback_handler(int nCode) { 
     [refToSelf updateProgressView:nCode]; 
    } 


    -(void) updateProgressView:(int32_t) nCode 
    { 
     NSString *status = nil; 
     status = [self progressUpdateToString:nCode]; 
     [self.progressLabelArray insertObject:status atIndex:0]; 
     [self.progressTableView reloadData]; 
     [self.progressTableView setNeedsDisplay]; 
    } 

나는 콜백이 같은 (UI 스레드)에오고 있기 때문에, performSelectorOnMainThread이 요구되지 않을 수 같아요.

내 문제는 테이블 뷰는 전체 작업이 완료되면 마지막 콜백 값을 보여 주기만하면 새로 고쳐집니다. 모든 콜백 후 UI를 새로 고칠 수있는 방법이 있습니까? 콜백은 상대적으로 빠를 수 있습니다.

+1

호출이 그때 어떻게 데이터의 변화를 관찰하는 것이 너무 빨리 오는 경우는 즉 visible –

+0

처음에는 눈치 채기가 너무 빠르지 않으며 다양한 콜백 후에 디버깅하고 휴식을 취할 때 View의 초기 값을 볼 수 있습니다. –

+0

여전히 문제를 해결할 수 없습니다. 내 친애하는 IOS 친구 - 도와주세요! –

답변

0

진행률 코드를 별도의 스레드에서 실행하여 문제를 해결했습니다. 콜백은 seprate 스레드에서 발생하고 메인 스레드 (UI 스레드)를 업데이트합니다. UI 스레드가 UI를 업데이트하기위한주기를 얻지 못했다고 생각합니다.

0

는 다음 블록에

tableView.reloadData()

통화를 보류하고있는 tableview는 문제없이 실시간 애플리케이션처럼 스크롤러를 새로 고치지 않고 새로 고쳐집니다. 빠른 3

: 목표 C를 들어

DispatchQueue.main.async() 
{ 
    tableView.reloadData() 
} 

: 마지막 변경 이유

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // Background work 
    [tableView reloadData]; 

}); 
관련 문제