web-dev-qa-db-ja.com

NSURLConnectionメソッドはIOS5では使用できなくなりました

URLへの同期または非同期接続を確立してそのデータを取得するために使用できるNSURLConnectionクラスを見ていました...このクラスにはIOS 5と私は彼らが認証またはダウンロードに関連するいくつかの正式なプロトコルを導入したのを見ましたが、たとえば、connection:didReceiveResponse:メッセージ(以前にデリゲートに送信され、もう利用できない)がまだ利用可能かどうかはわかりません一部のプロトコルでは..非同期接続を実装し、たとえば、応答を受信するとすぐにHTTPヘッダーを取得するにはどうすればよいですか?NSURLConnectionconnection:didReceiveResponse:メッセージと一緒に使用するよりも良い方法があると確信しています。stringWithContentsOfURLのようなメソッド常にコンテンツを同期的にロードしますか?非推奨のメソッドを回避し、_http response receive_mなどのイベントに反応してアプリに非同期ダウンロードを実装するために何を使用しますか?可能であれば、バックグラウンドタスクで同期ダウンロードを起動しますか?

29
Gianni Costanzi

NSURLConnectionDelegateは正式なプロトコルになりました(以前のバージョンでは非公式のプロトコルでした)。このプロトコルでは、次の(非推奨ではない)メソッドが宣言されています。

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

さらに、NSURLConnectionDelegateに準拠する2つのサブプロトコルがあります。

NSURLConnectionDataDelegateは、データをメモリにロードするデリゲートに使用され、次のメソッドを宣言します。そのうちのいくつかは、おなじみのはずです。

  • 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インストールの iOS4.3からiOS5.0 APIの違いに関するドキュメント およびNSURLConnection.hを参照してください。新しいSDKバージョンがリリースされると、ヘッダーファイル内のドキュメントの信頼性が開発者ライブラリで利用可能なドキュメントよりも高くなることは珍しくありません。後者が最新になるまでにはしばらく時間がかかります。

68
user557219

番号! Appleのライブラリを注意深く調べれば、認証や障害の問題に使用することに限定されません。

NSConnectionクラスオブジェクトに+(void)sendAsynchronousRequest:queue:completionHandler:を導入して以来、以前と同じ数のNSConnectionDelegateメソッドを実行できる多くのものを、「NSConnectionDataDelegate」&NSConnectionDownloadDelegate、新しい部屋を開いてNSURLConnectionメソッドに機能を追加します。 (iOS5以降)

ですから、使用を制限するのではなく、改善だと思います。

2
Sungwook Kim

私はちょうどこれと同じ問題に遭遇しました。非同期リクエストの送信は、ブロックとNSOperationQueueを使用するとより簡単になります。

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

これは、デリゲートが認証と障害の問題にのみ使用されるようになったことを意味します。

2
Dries De Smet