2011-02-15 3 views
1

UISegmentedControl이 하위보기로 중첩 된 도구 모음이있는 응용 프로그램이 있습니다. 나는 세그먼트를 전환 할 때 나는 다음 무엇을 할 :네트워크 작동 표시기 문제

/* 
* Set/Reset dei dati. 
*/ 
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
if (bannerVideo) { 
    [filmatiBanner release]; 
    filmatiBanner = nil; 
    filmatiBanner = [[NSMutableArray alloc] initWithCapacity:0]; 
    [[bannerVideo view] setHidden:YES]; 
    [bannerVideo release]; 
    bannerVideo = nil; 
} 
[lowerBannerActivity setHidden:NO]; 
[lowerBannerActivity startAnimating]; 
url = [NSURL URLWithString:@"http://www.udc.ntx.it/filmatiBlocco2.asp"]; 
request = [ASIFormDataRequest requestWithURL:url]; 
[request setPostValue:[[voci objectAtIndex:[switches selectedSegmentIndex]] objectForKey:@"codblocco"] 
       forKey:@"CodiceBlocco"]; 
[request startSynchronous]; 
// Bla bla yada yada 

보기로드 내가 제대로 위의 상태 표시 줄에 UIActivityIndicator 회전과 NetworkActivity을 볼 때. 그러나 스위치를 누르면 응용 프로그램이 작업을 완료 할 때까지 "정지"한 다음 스피너를 빠르게 표시 한 다음 숨 깁니다. 이 문제를 어떻게 해결해야합니까?

답변

1

다른 스레드에서 활동을로드해야합니다. 동일한 (주) 스레드에서이 작업을 수행해야합니다. startSynchronous는이를 나타냅니다. ASI 라이브러리가 다른 스레드에서이로드를 지원한다고 생각하지만 라이브러리에 익숙하지 않습니다. [: 자기 요청 setDelegate]

[요청 startAsynchronous] 다음

및 구현 : (당신은

뭔가를 호출 할 수 있습니다

- (무효) requestFinished : (ASIHTTPRequest *) 요청

해당 방법에서 네트워크 활동 표시기를 제거하십시오.)

또는이 같은 (하드 방법을 수행 할 수 있습니다 - 당신의 자신의 스레드를 시작;)) :

[NSThread detachNewThreadSelector : @selector (loadBanner : toTarget : 자기 withObject : PARAM]

loadBanner 방법이 끝나면, 당신은 배너가로드되는 메인 스레드 같은 것을 반환해야합니다 :

(loadBanner 방법에서이 호출)

[자기 performSelectorOnMainThread : @selector (bannerIsLoaded :) withObject : rez waitUntilDone : NO];

및 방법 bannerIsLoaded에서 네트워크 활동 표시기를 제거하고 배너 자체를 표시합니다.