2

以下に示すように、NSURLConnectionDownloadDelegateとNSURLConnectionDataDelegateの両方のデリゲートメソッドを実装しました。

問題は、connection:didReceiveResponse:、connectionDidFinishDownloading:destinationURL:が呼び出された後、connectionDidFinishLoading:が呼び出されないことです。connection:didReceiveData:も呼び出されません。

NSURLConnectionDownloadDelegateメソッドにコメントすると、他の3つは問題なく呼び出されます。

サーバーから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 {

}

これが私の.hファイルです

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

これは私がJSONを取得するためにサーバーに接続する方法です

[[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];

これは、必要に応じて問題をダウンロードするためのコードです

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

問題は、サーバーからJSONを取得するための呼び出しにあります。問題のダウンロードは正常に機能します。

4

2 に答える 2

1

で JSON データを取得する場合は-connection:didReceiveData:、NSURLConnectionDataDelegate を実装するオブジェクトにデリゲートを設定する必要があります。問題をファイルにダウンロードする場合、デリゲートは NSURLConnectionDownloadDelegate を実装するオブジェクトである必要があります。1 つのクラスで両方を同時に行うことはできません。

これは NSURLConnection ドキュメントではあまり説明されていませんが、コメントでNSURLConnection.hもう少し明確になります。

NSURLConnection は、リソース データをメモリに直接ロードするために使用できます。この場合は NSURLConnectionDataDelegate を指定する必要があります。また、リソース データをファイルに直接ダウンロードする場合は、NSURLConnectionDownloadDelegate を使用します。デリゲートは、終了条件が発生するまで NSURLConnection によって保持されます。これら 2 つのデリゲートは、基本プロトコル NSURLConnectionDelegate の論理的なサブクラスです。

于 2013-01-25T21:00:38.233 に答える