2011-10-18 2 views
29

URL에 동기화 또는 비동기 연결을 설정하고 데이터를 검색하는 데 사용할 수있는 NSURLConnection 클래스를보고있었습니다 ...이 클래스에 많은 변경이있었습니다. IOS 5 및 인증 또는 다운로드와 관련된 공식 프로토콜을 소개 한 것을 보았습니다. 예를 들어 connection:didReceiveResponse: 메시지 (이전에 위임자에게 전송되었지만 더 이상 사용할 수없는 메시지)가 여전히 표시되는 경우에는 표시되지 않습니다. 일부 프로토콜에서 사용할 수 있습니다. 응답을 받자 마자 비동기 연결을 구현하고 예를 들어 HTTP 헤더를 검색하는 방법은 무엇입니까? 나는 NSURLConnectionconnection:didReceiveResponse: 메시지와 함께 사용하는 것보다 낫다는 것을 확신합니다. stringWithContentsOfURL과 같은 메소드는 항상 컨텐츠를 동 기적으로로드합니까? 더 이상 사용되지 않는 메소드를 피하고 응용 프로그램에서 비동기 다운로드를 구현하는 데 사용하는 경우 _http response received_m 등의 이벤트에 반응합니까? 가능한 경우 백그라운드 작업에서 동기 다운로드를 실행합니까?NSURLConnection 메서드는 IOS5에서 더 이상 사용할 수 없습니다

+0

귀하의 질문은 여러 질문으로 나눠 져야합니다. 귀하의 질문에 5 가지 질문이있을 수 있습니다. 내 대답은 내가 가장 중요하게 생각하는 것, 즉 iOS 4.3에서 사용할 수 있었던 연결 대리자 메서드의 명백한 제거를 다룹니다. –

답변

68

NSURLConnectionDelegate은 공식 프로토콜이되었습니다 (이전 버전에서는 비공식 프로토콜이었습니다). 이 프로토콜에서, 다음의 (비되지 않음) 방법이 선언된다

:

  • connection:didFailWithError:
  • connectionShouldUseCredentialStorage:
  • connection:willSendRequestForAuthenticationChallenge:

게다가, NSURLConnectionDelegate 준수 개의 하위 프로토콜 존재

NSURLConnectionDataDelegate은 데이터를 메모리에로드하는 대리자에 사용되며 다음과 같은 metho 나는 확신 일부 DS, 당신은 잘 알고 찾을 수 있습니다 :

  • connection:willSendRequest:redirectResponse:
  • connection:didReceiveResponse:
  • connection:didReceiveData:
  • connection:needNewBodyStream:
  • connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
  • connection:willCacheResponse:
  • connectionDidFinishLoading:

NSURLConnectionDownloadDelegate는 디스크 파일에 직접 데이터를 저장하는 대표단을 위해 사용되며, 다음과 같은 방법을 선언한다 :

  • connection:didWriteData:totalBytesWritten:expectedTotalBytes:
  • connectionDidResumeDownloading:totalBytesWritten:expectedTotalBytes:
  • connectionDidFinishDownloading:destinationURL:

당신이 볼 수 있듯이을 , 당신은 여전히 ​​약간의 수정과 함께 이전 대의원을 사용할 수 있습니다.

자세한 내용은 로컬 Xcode 설치에서 iOS 4.3 to iOS 5.0 API Differences document 및 NSURLConnection.h를 참조하십시오. 새로운 SDK 버전이 출시되면 헤더 파일 안의 문서가 개발자 라이브러리에서 제공되는 문서보다 더 안정적입니다. 후자가 최신 상태를 유지하는 데 시간이 걸립니다.

+0

고맙습니다 ... 참고 문서가 아직 업데이트되지 않았으므로 API 차이점 문서와 헤더 파일은 좋은 출발점입니다. 어딘가에서 본 것으로 생각했습니다 (지금은 찾을 수 없습니다). ..) 그 문서는 일반적으로 귀하의 애플 리케이션은 NSURLConnectionDataDelegate 프로토콜을 구현해서는 안된다고 ... 제가 틀렸다면 말해 : 다운로드 진행률 표시 줄의 일종을 구현 해야하는지, 당신 didReceiveData를 사용해서는 안된다 ' 약간의 데이터를 다운로드했거나 didReceiveData가 작동하는 방식과 전송 된 시점을 오해 했습니까? –

+0

@Gianni 예, '- ... didReceiveData :'가 데이터를 수신했음을 알리기 위해 델리게이트로 전송됩니다. 이러한 데이터를 저장하는 것 외에도 다운로드 진행률 표시 줄을 업데이트하는 데 사용할 수 있습니다. –

+0

FYI 04/08/12 현재 5.1 SDK 설명서에는 NSURLConnectionDataDelegate (온라인도 SDK도 포함하지 않음)에 대한 완전한 참조가 없습니다. –

2

방금이 동일한 문제가 발생했습니다. 블록 및 NSOperationQueue을 사용하면 비동기 요청을 보내는 것이 더 단순 해 보입니다.

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler 

이것은 이제 대리인이 인증 및 오류 문제에만 사용됨을 의미합니다.

+0

감사합니다. 참조 문서에서 찾을 수 없습니다. 곧 업데이트 될 것입니다. –

+1

일반적으로 업데이트됩니다. 그러나이 방법은 iOS 4.3에서 사용할 수 없기 때문에주의하십시오. 요약하면 : iOS 4.3 및 iOS 5.0과 호환되도록 두 가지 방법을 모두 구현해야합니다. –

2

NO 이상 사용할 수 있었어야 Apple 웹 사이트

https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

https://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html

에 문서를 발견 havent 한! Apple 라이브러리를주의 깊게 살펴보면 인증 및 오류 문제에 사용하도록 제한되지 않습니다.

NSConnection 클래스 객체에 +(void)sendAsynchronousRequest:queue:completionHandler: 도입 이후, 이전과 같은 많은 NSConnectionDelegate 방법을 수행 할 수있는 많은 것들이 지금 NSURLConnection 방법에 더 많은 기능을 추가하기 위해 새로운 공간을 열어 & NSConnectionDownloadDelegate "NSConnectionDataDelegate"라는 공식 프로토콜로 사용할 수 있습니다. (iOS5에서)

그래서 나는 그것의 사용을 제한하지 않는 개선이라고 생각합니다.

관련 문제