2010-12-01 4 views
0

일부 이미지를 다운로드하라는 요청을 받고 있는데 그 다음으로 하위보기를 대체하고 싶습니다. 이것은 UI가 차단 된 다음 나중에 새보기가 표시됨을 의미합니다.iOS4 networkActivityIndicatorVisible이 UI를 통해 차단되었습니다.

다운로드로 인해 차단이 발생했음을 사용자가 이해하기를 바랍니다.

먼저 나는

내 요청이 UI 스레드를 차단하기 때문에, 활동 표시 등의 깜박임 (대부분 아무것도) 상한값하지에 이르게
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
[self downloadFunction]; 
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

을 사용했습니다.

컨트롤러에 밀어 넣기 전에 다운로드 할 수있는 데이터에 의존하기 때문에 downloadFunction을 배경으로 놓을 수 없습니다 ("동일한 뷰 컨트롤러 인스턴스를 두 번 이상 푸시하는 것이 지원되지 않습니다."라는 오류가 발생할 수 있습니다. 버튼을 두 번 이상 클릭 할 수 있음).

은 그럼 뷰의 상단에 회전 바퀴와 서브 뷰를 넣어 시도 ...

[self performSelectorInBackground:@selector(showActivitySubView) withObject:nil]; 
or 
[NSThread detachNewThreadSelector: @selector(showActivitySubView) toTarget:self withObject:nil]; 

여전히 UI가 차단 내 표시등이 그냥 완료 다운로드 후 표시됩니다

아이디어가 있으십니까?

답변

1

두 가지로 메소드를 분할하고 메인 스레드를 차단하기 전에 시간 새로 고침 스레드를 사용할 수 있도록 시간 초과 호출을 사용할 수 있습니다. 예를 들면 :

- (void) doActualWork { 
    [self downloadFunction]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
} 

- (void) doWork { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    [self performSelector:@selector(doActualWork) withObject:Nil afterDelay:0.05]; 
} 

가이 일을 아마 더 좋은 방법, 그리고 내가 작업 표시 줄에있는 작은 표시등이 행복 응용 프로그램 검토 사람들을 유지하기에 충분한 활동이 표시 될 것이라고 모르겠지만,이 작동합니다 스레딩을 필요로하지 않습니다.

+0

고마워요! 그것은 저를 위해 일했습니다 ... 네트워크 활동을 나타내는 데있어서, doActualWork가 시작되기 전에 실행될 뷰에 UIActivityIndicatorView가있는 또 다른 하위 뷰를 추가 했으므로 다운로드가 UI를 차단할 것이므로 아무에게도 신경 쓰지 않아도됩니다. 버튼을 두 번 :-) –

관련 문제