2012-11-19 2 views
0

이미지 및 오디오 파일을 업로드하고 다운로드하는 데 필요한 단일보기가 있습니다. 여기에 내가 내가이 사용하고 다운로드를 시작하려면 NSURLConnection에 문제가 발생했습니다.

을하고있는 중이 야 :

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

을이 트리거의 delagate 방법

connection:didReceiveResponse: 

connection:didReceiveData: 

connectionDidFinishLoading: 

이러한 방법에서 내가 다운로드 진행률을 표시, 파일 크기를 계산하고

진행률 표시 줄을 통해 내 장치에 파일을 저장합니다. 업로드

나는이

[NSURLConnection connectionWithRequest:request delegate:self]; 

을하고이 connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:

이 위임 방법을 사용하고하는 것은 좋은 업로드 파일을 작동하고 또한 bytesWritten, totalBytesWritten, totalBytesExpectedToWrite에 대한 이야기뿐만 아니라

connection:didReceiveResponse: 

connection:didReceiveData: 

connectionDidFinishLoading: 
를 호출

및 모두가 대리인 메서드이므로 유효합니다.

하지만 문제는이 세 가지를 사용하여 다운로드를 처리하는 것입니다.

데이터 업로드 및 다운로드와 관련하여 NSURLConection을 사용하는 올바른 방법은 무엇입니까?

참조 Apple Doc

+0

나중에 더 자세히 답변 해 드리겠습니다. – Peres

+0

괜찮아 ... 고마워. –

답변

-1

당신은 당신의 작업에 대한 AFNetworking을 사용할 수 있습니다.

AFNetworkingiOSMac OS X에 대한 유쾌한 네트워킹 라이브러리입니다. NSURLConnection, NSOperation 및 기타 익숙한 Foundation technologies 위에 만들어졌습니다. 사용하기 편리한 기교로 잘 디자인되고 기능이 풍부한 API를 갖춘 modular architecture이 있습니다. 나 전용 클래스 (예를 들어, DownloadingDelegate 및 UploadingDelegate)의 대표를 구현하고 각 연결에 대해 서로 다른 대표를 인스턴스화하는 것에 대한

SDK here

+0

그건 물어 보지 않았어. – Peres

+0

@JackyBoy, 나는 그에게 도움이 될만한 대체 방법을 안내했다. 그 말이 맞지 않니? –

+0

그 사람은 X 나 Y를하는 대체 방법을 요구하지 않고 X와 Y를하는 방법에 대한 설명을 요구합니다.'AFNetworking'은 많은 작업을 추상화합니다.이 경우에는 질문에 대답하는 데 도움이되지 않습니다 . – Peres

2

가장 좋은 방법을 찾아보십시오. 다운로드 및 업로드 프로세스는 완전히 독립적으로 처리 될 수 있습니다.

다운로드 및 업로드가 동시에 발생하지 않으면 부울을 플래그로 사용하고 대리자 함수에서 테스트하는 것이 더 간단 할 수 있습니다.

예를 들어, downloading이라는 부울 인스턴스 변수를 사용한다고 가정 해 보겠습니다.

당신은 다운로드해야합니다 :

downloading = true; 
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

그리고 업로드 : 대리인에 그런

downloading = false; 
[NSURLConnection connectionWithRequest:request delegate:self]; 

다음 NSURLConnections 및 내부

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    if(downloading) 
    { 
     // handle the response when downloading ... 
    } 
    else 
    { 
     // when uploading 
    } 
} 
1

저장 포인터를 대표자는 어느 것이 사용되는지 결정합니다.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    if(connection==downloaderConn) { 
     //handle download 
    } 
    else { 
     //handle upoad 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 이것은 내 마음 속에 있었지만 올바른 접근 방법입니까? –

+1

은 단순한 경우에 해당하며, 전용 클래스가 있어야하는 것은 아닙니다. 사과는 거기에서 광범위하게 그것을 사용합니다. 이 접근 방식은 2 또는 3 클래스에서 좋지만 N 개의 연결 객체로 인해 지저분 해집니다. –

관련 문제