2

아래와 같이 NSURLConnectionDownloadDelegate, NSURLConnectionDataDelegate 대리자 메서드를 구현했습니다.connectionDidFinishDownloading 사용 방법 : destinationURL : 및 connectionDidFinishLoading :

문제는 연결 후 : didReceiveResponse :, connectionDidFinishDownloading : destinationURL :이 (가) 호출되었지만 connectionDidFinishLoading이 아니라는 것입니다. Even connection : didReceiveData :가 호출되지 않았습니다.

NSURLConnectionDownloadDelegate 메서드에 주석을 달면 다른 세 개는 아무 문제없이 호출됩니다.

서버에서 JSON을 가져 오는 NSURLConnections가 있습니다. NSURLConnectionDataDownloading 대리자 메서드는 뉴스 스탠드에서 문제를 다운로드하는 데 사용됩니다.

어떻게 관리하나요? 내가

- (void)connection:(NSURLConnection *)connection didWriteData:(long long)bytesWritten totalBytesWritten:(long long)totalBytesWritten expectedTotalBytes:(long long)expectedTotalBytes { 

} 

- (void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL { 

} 

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 

} 

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

} 

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

} 

을 구현하고보다 여기

내가 JSON에게

[[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES]; 
를 얻기 위해 서버에 연결하고 어떻게 이것은 여기 내 .H 파일

@interface FirstTopViewController : UIViewController <NSURLConnectionDownloadDelegate, NSURLConnectionDataDelegate, NSURLConnectionDelegate, UITableViewDataSource, UITableViewDelegate> 

가 모든 대의원 방법이다

필요한 경우 문제를 다운로드하기위한 코드입니다.

NSURLRequest *urlReq = [NSURLRequest requestWithURL:myURL]; 
NKAssetDownload *asset = [currentIssue addAssetWithRequest:urlReq]; 
[asset downloadWithDelegate:self]; 

문제는 서버에서 JSON을 가져 오는 호출과 관련되어 있습니다. 문제가있는 다운로드가 정상적으로 작동합니다.

답변

1

-connection:didReceiveData:에서 JSON 데이터를 가져 오려면 NSURLConnectionDataDelegate를 구현하는 객체에 대리인을 설정해야합니다. 문제를 파일로 다운로드하려면 대리자가 NSURLConnectionDownloadDelegate를 구현하는 개체 여야합니다. 단일 클래스는 한 번에 둘 다 할 수 없습니다.

이있는 NSURLConnection의 문서에 잘 설명되어 있지 않지만 NSURLConnection.h의 설명은 좀 더 명시합니다

있는 NSURLConnection 자원 데이터의 로딩에 사용될 수있다

직접 메모리에, 어떤에서 경우 NSURLConnectionDataDelegate가 제공되어야하며, 리소스 데이터를 파일로 직접 다운로드하는 경우에는 NSURLConnectionDownloadDelegate가 사용됩니다. 대리자는 이며 터미널 조건이 이 될 때까지 NSURLConnection에 유지됩니다. 이 두 대표는 논리적으로 하위 프로토콜 인 기본 프로토콜 NSURLConnectionDelegate입니다.

2

NSURLConnectionDataDelegate는 데이터를 메모리에로드하는 데 사용되는 대리자 메서드를 정의합니다. NSURLConnectionDownloadDelegate : 리소스 다운로드를 디스크 파일에 직접 수행하는 데 사용되는 메서드를 위임합니다.

그런 다음 delegate에 connectionDidFinishDownloading : destinationURL :을 구현 한 경우. 그러면 NSURLConnection에 NSData와 같은 메모리가 아닌 다른 디스크 파일에 데이터를 다운로드하도록 알립니다. NSURLConnectionDataDelegate 메서드가 호출되지 않습니다.connectionDidFinishDownloading : destinationURL :을 위임 클래스 구현에서 제거하면 연결 : DidReceiveData :가 대신 호출됩니다.

귀하의 경우, 다른 용도로 두 명의 도우미 대리인을 구현하십시오.

+0

많은 도움을 받았습니다. 감사. –