0

NSOperationQueue を使用して複数のファイルをサーバーにアップロードします。

//クラスB

一度に複数のファイルをサーバーにアップロードしている間、popviewcontroller (クラス A) に移動します。アプリが突然クラッシュしました。中断することなくファイルをサーバーにアップロードする方法はありますか。

前もって感謝します

//クラスB

-(void)UploadtoS3
{
    // Convert file to data from locapathfile here
    NSData* imgData = [NSData dataWithContentsOfFile:localFilePath]; //VIDEO FILEPATH OR IMAGEPATH

    if(![self upload_NetworkQueue]) // If Queue is not initialized
    {
        [[self upload_NetworkQueue] cancelAllOperations];
        [self setUpload_NetworkQueue:[ASINetworkQueue queue]];
        [[self upload_NetworkQueue] setDelegate:self];
        [[self upload_NetworkQueue] setRequestDidFailSelector:@selector(upload_RequestFailed:)];
        [[self upload_NetworkQueue] setQueueDidFinishSelector:@selector(upload_RequestDone:)];
        [[self upload_NetworkQueue] setShowAccurateProgress:YES];
        [[self upload_NetworkQueue] setMaxConcurrentOperationCount:1];
    }

    NSString *s3keyPath = [NSString stringWithFormat:@"/test123/%@",fileName];
    NSLog(@"UPLOAD IMAGE S3 FILE NAME -----------  %@",s3keyPath);
    request = [ASIS3ObjectRequest PUTRequestForData:imgData withBucket:testBuck key:s3keyPath];
    [request setSecretAccessKey:s3SecretKey];
    [request setAccessKey:s3AccessKey];
    [request setTimeOutSeconds:20];
    [request setDelegate:self];
    [request setNumberOfTimesToRetryOnTimeout:3];
    [request setMimeType:mimeType];
    [request setUploadProgressDelegate:self];
    [[self upload_NetworkQueue] addOperation:request];
    [[self upload_NetworkQueue] go];
}
4

1 に答える 1

0

他のポスターが示唆したように、ASI のコードから離れるべきです。サポートされなくなりました。

しかし、あなたの問題に関しては。あなたが投稿したコードはView Controllerにあると思います。(投稿のクラスB)ビューコントローラーをネットワーククラスのデリゲートとして設定しています。

次に、ダウンロードを開始したView Controllerから別のView Controllerにポップしています。これにより、アップロードを要求したビュー コントローラーの割り当てが解除されます。したがって、ダウンロード キューがデリゲートに通知を送信しようとすると、クラッシュします。

一般に、ダウンロードなどのグローバルなアプリケーションをView Controllerで管理するべきではありません。ダウンロードを管理するシングルトン クラスを作成することをお勧めします。シングルトンの設計パターンに慣れていない場合は、Google 検索を行ってください。iOS/Objective-C でシングルトンをセットアップする方法を説明するオンラインのチュートリアルがたくさんあります。

于 2015-03-09T14:04:58.160 に答える