URLへの同期または非同期接続を確立してそのデータを取得するために使用できるNSURLConnection
クラスを見ていました...このクラスにはIOS 5と私は彼らが認証またはダウンロードに関連するいくつかの正式なプロトコルを導入したのを見ましたが、たとえば、connection:didReceiveResponse:
メッセージ(以前にデリゲートに送信され、もう利用できない)がまだ利用可能かどうかはわかりません一部のプロトコルでは..非同期接続を実装し、たとえば、応答を受信するとすぐにHTTPヘッダーを取得するにはどうすればよいですか?NSURLConnection
をconnection:didReceiveResponse:
メッセージと一緒に使用するよりも良い方法があると確信しています。stringWithContentsOfURL
のようなメソッド常にコンテンツを同期的にロードしますか?非推奨のメソッドを回避し、_http response receive_mなどのイベントに反応してアプリに非同期ダウンロードを実装するために何を使用しますか?可能であれば、バックグラウンドタスクで同期ダウンロードを起動しますか?
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バージョンがリリースされると、ヘッダーファイル内のドキュメントの信頼性が開発者ライブラリで利用可能なドキュメントよりも高くなることは珍しくありません。後者が最新になるまでにはしばらく時間がかかります。
番号! Appleのライブラリを注意深く調べれば、認証や障害の問題に使用することに限定されません。
NSConnectionクラスオブジェクトに+(void)sendAsynchronousRequest:queue:completionHandler:
を導入して以来、以前と同じ数のNSConnectionDelegate
メソッドを実行できる多くのものを、「NSConnectionDataDelegate
」&NSConnectionDownloadDelegate
、新しい部屋を開いてNSURLConnection
メソッドに機能を追加します。 (iOS5以降)
ですから、使用を制限するのではなく、改善だと思います。
私はちょうどこれと同じ問題に遭遇しました。非同期リクエストの送信は、ブロックとNSOperationQueue
を使用するとより簡単になります。
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
これは、デリゲートが認証と障害の問題にのみ使用されるようになったことを意味します。