2

iOS AWS SDK の一括アップロードを利用しています配列はオブジェクト[AWSTask taskForCompletionOfAllTasks:tasks]の配列です。アップロードが完了したら、配列を列挙して、すべてのタスクが成功したかどうかを確認できます。ただし、失敗または失敗したタスクを再試行する方法がわかりません。失敗したタスクの配列を渡しても、それらのタスクで何もしませんか?tasksAWSTask *task = [self.transferManager upload:uploadRequest];taskForCompletionOfAllTasks

iOS AWS docsには、失敗または失敗したタスクの再試行については何も言及されていません。はい、ありますが、AWSServiceConfiguration.maxRetryCountそのカウントを超えた後に失敗または失敗したタスクを再試行するという問題は解決しません。また、iOS AWS Examplesもこれに関して何も示していません。

- (void)performS3UploadWithRequest:(NSArray *)tasks withRetryCount:(int)retryCount
{

    if (retryCount == 0) {
        alert = [[UIAlertView alloc] initWithTitle:@"Failed to Upload Content"
                                           message:@"It appears we are having issues uploading your card information."
                                          delegate:self cancelButtonTitle:nil
                                 otherButtonTitles:@"Retry Upload", @"Retry Later", @"Cancel Order", nil];
        [alert show];
    } else {
        [[AWSTask taskForCompletionOfAllTasks:tasks] continueWithExecutor:[AWSExecutor mainThreadExecutor] withBlock:^id(AWSTask *task) {
            NSMutableArray *faultedTasks = [NSMutableArray new];
            for (AWSTask *finishedTask in tasks) {
                if (finishedTask.cancelled || finishedTask.faulted) {
                    [faultedTasks addObject:finishedTask];
                }
            }

            if (faultedTasks.count > 0) {
                [self performS3UploadWithRequest:faultedTasks withRetryCount:retryCount-1];
            } else {
                [[NSNotificationCenter defaultCenter] postNotificationName:kWHNotificationUploadDone object:self userInfo:nil];
            }
            return nil;
        }];
    }
}
4

1 に答える 1