2012-07-28 2 views
0

내 응용 프로그램에서 내게 가장 큰 문제인 마지막 문제를 해결하려고합니다.멀리서 탐색 한 후 다운로드를 중단하고 스레드를 발행 하시겠습니까?

enter image description here

은 내가 비동기있는 NSURLConnection을 통해 웹 서버에서 파일/문서를 다운로드 스크린 샷에 표시된이 downloadView 있습니다.

모든보기 구성 요소가 완벽하게 작동합니다 (다운로드 버튼, progressBarView, abortButton).

다운로드가 시작되면 진행률 표시 줄이 증가하고 연결을 nil로 설정하고 데이터 길이를 0으로 설정하여 다운로드를 완벽하게 중단 할 수 있습니다.

:: 내 어려운 문제가 있음 :: 다운로드가 백그라운드에서 처리 나는 "BACK"버튼을 클릭하고 firstView로 다시 이동 한 다음이 downloadView로 다시 이동한다

, 다운로드에 대한 액세스 권한을 잃게됩니다. 더 이상 중단하거나 모니터 할 수 없습니다. 진행률 표시 줄이 0으로 재설정됩니다. 그러나 progressBar.progress에 대한 NSLog를 통해 다운로드가 진행 중임을 계속 확인할 수 있습니다.

이 문제는 뷰를 유지하고 스레드에 액세스하고 "뒤로"버튼을 누르면 downladView를 활성 상태로 유지하는 것과 관련이 있다고 생각합니다.

너무 많이 작성하여 죄송하지만이 문제를 명확하게 설명하려고합니다.

여기에 파일을 다운로드하는 방법을 보여주는 기본 코드가 나와 있습니다.

-(IBAction)downloadButton:(id)sender{ 
urlLink= @"http://www.example.com/text.pdf"; 

NSURLRequest *request= [NSURLRequest requestWithURL:[NSURL URLWithString:urlLink] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0]; 

connectionbook = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
} 
// using the regular delegate connectino methods 
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{} 

답변

2

핵심 문제는 뒤로 버튼을 쳤을 때, 뷰 컨트롤러 객체가 dealloc'd됩니다 (또는해야)한다는 것입니다, 그리고 당신이 그보기를 다시 방문 할 때, 당신은 처음부터 만들어 다른보기를 얻을.

그래서 몇 가지 옵션이 있습니다. 강력한 참조를 유지하기 위해 되돌아온보기가 있으므로 여기에 표시된보기가 실제로 할당 취소되지 않습니다. 따라서 항상 같은 대상을 밀어 넣습니다. 당신은 viewWillAppear 등을 다루기 위해 어떤 상태를 유지해야 할 것입니다.

다른 해결 방법은 연결을 유지하고 진행중인 정보를 볼 수있는보기 컨트롤러에 대한 몇 가지 방법이 있어야합니다.

2 개의 다른 의견입니다. sadi는 "연결을 nil로 설정하고 데이터 길이를 0으로 설정하여 다운로드를 완벽하게 중단 할 수 있습니다. 올바른 방법이 아닙니다. 연결을 중지하려면 [conn cancel]을 보낸 다음 conn.delegate - nil을 보내면 해제 할 수 있습니다.

+0

David, 내 앱에서 무슨 일이 일어나고 있는지 정확히 말한 내용입니다. 이 뷰로 돌아올 때마다 새로운 개체 세트 (새로운 진행률 표시 줄, 새로운 중단 단추 등)가 표시됩니다. 강력한 참조를 유지하거나 올바른 방식으로보기를 유지하는 방법을 모르겠습니다. 나는 firstView를 통해 downloadView로 이동합니다. 특정 downloadView에 대한 참조를 유지하려면 어떻게해야합니까 ??? 추신. ARC를 사용합니다. 연결에 대한 의견에 관해서는 연결을 취소하고 [self.connectionbook cancel] 질문에 대한 언급을 잊어 버렸습니다. 고마워요 –

+0

부모 클래스에서 ivar을 만들고 두 번째 UIViewController 하위 클래스를 만듭니다. 그것을 밀어야 할 때, 저장된 ivar을 밀어 넣으십시오.다시 돌아가려면 다시 밀어 넣으십시오. 결코 풀려나 지 않을 것이다. viewWillAppear, viewDidAppear가 있지만 viewDidLoad 만 가져올 수 있습니다. 이제 당신이하고 싶은 것은 실제로 공통적 인 작업 방식이 아닙니다. 더 나은 방법은 탭 막대, 두 개의 탭, 앞뒤로 전환하는 것입니다. 사실 그것은 당신이하고있는 일이지만 밀고 터지는 것입니다. –

관련 문제