0

ダウンロードの進行状況バーを表示したいのですが、2日から立ち往生しています。サーバーにポストでjsonを送信しており、応答サーバーでビデオデータを送信しています。プログレスバーを表示するには、次のようなロジックコードを記述します

didreceivedataのメソッドでは、受信ASIhttepデータをグローバルに追加し、リクエスト完了メソッドでは、そのグローバルをファイルにNSmutabledata書き込みます。Nsmutalbedataしかし、ファイルは空白で、ファイルに保存されません。

ASIHttprequest が古いライブラリであることは知っていますが、誰もが AFnetworking を使用することを提案していますが、コードを変更したくありません。時間がかかり、ドキュメントを再度読まなければならないからです。

データを追加し、ダウンロードが完了したら、その追加されたデータをファイルに書き込む方法を教えてください。

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[[NSURL alloc] initWithString:@"http://testing.io/dev.php/video/verifyReceipt"]];

    [request setDidReceiveDataSelector:@selector(request:didReceiveData:)]; 
    [request setPostValue:resultAsString forKey:@"verify"];
    [request setDidFinishSelector:@selector(requestDone:)];
    [request setTimeOutSeconds:120];
    [request setDelegate:self];
    [request setNumberOfTimesToRetryOnTimeout:2];
    [request setDownloadProgressDelegate:progressBar];
    request.showAccurateProgress = YES;

    [request startSynchronous];
    }
    -(void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data
    {
          [videoData appendData:data];
          NSLog(@"data is %@",data);
    }

   - (void)requestDone:(ASIHTTPRequest *)request
   {
    //[MBProgressHUD hideHUDForView:self.view animated:YES];

    // SAVED PDF PATH
    // Get the Document directory
      NSString *documentDirectory =   [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
     // Add your filename to the directory to create your saved pdf location
    NSString* movLocation = [documentDirectory stringByAppendingPathComponent:[fileName stringByAppendingString:@".mov"]];

    if(request.responseStatusCode==200)
    {
        [videoData writeToFile:movLocation atomically:NO];
        NSLog(@"in request done sucsessfully downlaod and store in database %d",request.responseStatusCode);
        [DBHelper savePurchaseId:fileName];
        [self movieReceived];
    }
    else
    {        
        NSLog(@"in request downlaod and store in database failed %@",request.responseHeaders);

    }
 }
4

2 に答える 2

0

わかりました、まずファイルパスを確認してください。私は通常、次の方法でファイルパスを参照することを好みます:

この方法でアプリケーションのルートを取得する必要があります。

NSString* rootPath = NSHomeDirectory();

Appleファイルシステムガイドラインで指定されているサブフォルダーの1つにデータを保存します

NSString* fullPath = [rootPath stringByAppendingPathComponent:@"subFoldeder/file.extension"];

新しいデータを古いデータに追加することについて、非常に簡単な解決策は、次の方法で videoData を初期化することです。

NSMutableData *videoData = [[NSMutableData alloc] initWithContentsOfFile:@"filePath"];

その後、データを受信したときにすでにデータを追加しているように処理し、最後に完全なファイルを書き込むことができます

メモリを使いすぎないようにするための正しい方法は、ファイルを開いて最後までシークし、ファイルにデータを追加することです。

于 2013-06-18T10:11:41.487 に答える