2012-04-18 10 views
0

URL에서 데이터를 가져 와서 비용이 많이 드는 작업 (특히 패치 부분)을 다시로드하는 tableload와 "다시로드"버튼이 있습니다.UITextView가 지연되었습니다.

나는이 상황이 발생하는 동안 사용자에게 표시 정보를 원한다. 그래서 "Loading"UITextView를 위에 올려 놓고 가져 오기/다시로드 작업을 수행 한 다음 UITextView를 제거한다고 생각했습니다.

여기에 코드입니다 :

- (IBAction)refreshData:(id)sender { 

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height-30, self.view.frame.size.width, 30)]; 
    [self.view addSubview:textView]; 
    textView.text = @"Loading.."; 
    textView.textColor = [UIColor whiteColor]; 
    textView.backgroundColor = [UIColor grayColor]; 
    textView.editable = NO; 

    [self fetchData]; 
    [self.tableView reloadData]; 

    [textView removeFromSuperview]; 
} 

내가 할 행동은 UITextView 화면에 렌더링하기 전에 fetchData 실행한다는 것입니다. UITextView가 화면에 나타나기 전에 실행되는 fetchData 안에 NSLog가 있기 때문에 이것을 알 수 있습니다.

여기에 분명한 사실이 있습니까? 감사.

답변

1

당신이 완료 인출 한 후, 새로운 방법 fetchDataFinished

-(void) fetchDataFinished{ 
    [self.tableView reloadData]; 
    [self.textView removeFromSuperview]; 
} 

참고로 정의된다

[self performSelectorOnMainThread:@selector(fetchDataFinished) withObject:nil waitUntilDone:NO]; 

를 추가하여 fetchData 방법 안에 그런

[self performSelectorInBackground:@selector(fetchData) withObject:nil]; 

[self fetchData]; 교체 너는 만들어야 만한다. textView 이 메소드로 액세스 할 수있는 프롭퍼티

나는 당신의 특별한 경우에 위의 내용을 시도하지는 않았지만 많은 비슷한 상황에서 유사한 구조를 성공적으로 사용했습니다.

관련 문제