0

画像と音声ファイルのアップロードとダウンロードの両方を1つのビューで表示できます。ここで私がしていること

ダウンロードを開始するには、これを使用しています:

 NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

そしてこれはその遅延メソッドをトリガーします

connection:didReceiveResponse:

connection:didReceiveData:

connectionDidFinishLoading:

これらの方法では、ファイルサイズを計算し、進行状況バーを介してダウンロードの進行状況を表示し、デバイスにファイルを保存しています。

アップロードのために私はこれをやっています

[NSURLConnection connectionWithRequest:request delegate:self];

そしてこれを使うconnection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:

このデリゲートメソッドは、ファイルのアップロードを正常に機能し、bytesWritten、totalBytesWritten、totalBytesExpectedToWriteについても通知しますが、呼び出しも行います。

connection:didReceiveResponse:

connection:didReceiveData:

connectionDidFinishLoading:

すべてがデリゲートメソッドであるため、有効です。

しかし、問題は、ダウンロードを処理するためにこれら3つを使用していることです。

データのアップロードとダウンロードに関してNSURLConectionを操作する正しい方法は何ですか?

参照AppleDoc

4

3 に答える 3

2

私にとって最善の方法は、デリゲートを専用クラス (DownloadingDelegate や UploadingDelegate など) に実装し、接続ごとに異なるデリゲートをインスタンス化することです。ダウンロードとアップロードのプロセスは、完全に独立して処理できます。

または、ダウンロードとアップロードが同時に行われない場合は、ブール値をフラグとして使用し、デリゲート関数でテストする方が簡単です。

たとえば、 というブール値のインスタンス変数を使用するとしますdownloading

ダウンロードには次のものがあります。

downloading = true;
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

そしてアップロード:

downloading = false;
[NSURLConnection connectionWithRequest:request delegate:self];

次に、デリゲートで:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    if( downloading )
    {
        // handle the response when downloading ...
    }
    else
    {
        // when uploading
    }
}
于 2012-11-19T10:44:04.697 に答える
-1

タスクに使用できAFNetworkingます。

AFNetworkingiOSはとのための楽しいネットワーキング ライブラリですMac OS XNSURLConnectionNSOperation、およびその他のおなじみの の上に構築されていFoundation technologiesます。modular architectureよく設計された機能豊富な API を備えており、使用するのが楽しくなります。

ここでSDKを見つけます

于 2012-11-19T10:31:17.987 に答える