AWSS3TransferUtilityMultiPartUploadTask - значение прогресса не обновляется, возвращаясь из фона

Я использую AWS iOS SDK для загрузки файлов на S3. я использую AWSS3TransferUtility потому что я хочу разрешить фоновые загрузки.

Фоновая задача работает - большой файл может успешно загружаться в фоновом режиме. Проблема в том, что когда я возвращаю свое приложение на передний план, task.result.progress.fractionCompleted значение остается на значении до того, как оно будет обосновано. И если я передний план моего приложения до завершения загрузки, значение прогресса будет оставаться на этом значении, пока оно не будет сделано, а затем подскочите до 1,0.

Когда приложение возвращается на передний план, я звоню enumerateToAssignBlocksForUploadTask:multiPartUploadBlocksAssigner:downloadBlocksAssigner: в моем классе TransferUtility, и я переназначаю обработчики прогресса и завершения.

Кто-нибудь знает, что может привести к тому, что это значение не обновляется? Я не уверен, как возобновить обновление моего индикатора выполнения из-за этого. Спасибо!

Изменить: Здесь я начинаю процесс загрузки. У меня есть оболочка для задачи AWS, которая содержит обработчики прогресса и завершения.

func upload(storagePath: String, sourceURL: URL, _ progressCompletion: @escaping ProgressCompletionCallback)-> UploadTask {

    let expression = AWSS3TransferUtilityMultiPartUploadExpression()
    expression.progressBlock = {(task, progress) in
        DispatchQueue.main.async(execute: {
            print("Progess: \(progress)")
            progressCompletion(false, Float(progress.fractionCompleted), nil)
        })
    }

    var completionHandler: AWSS3TransferUtilityMultiPartUploadCompletionHandlerBlock
    completionHandler = { (task, error) -> Void in
        DispatchQueue.main.async(execute: {
            print("Completed!")
            progressCompletion(true, Float(task.progress.fractionCompleted), error)
        })
    }

    let awsTask = transferUtility.uploadUsingMultiPart(fileURL: sourceURL,
                                         bucket: Constants.bucketName,
                                         key: storagePath,
                                         contentType: "text/plain",
                                         expression: expression,
                                         completionHandler: completionHandler)

    return UploadTask(task: awsTask,
                      progressBlock: expression.progressBlock!,
                      completionBlock: completionHandler)

}

0 ответов

Я сталкиваюсь с той же проблемой при загрузке файлов. Вот ссылка на проблему, которую я открыл на их странице GitHub, по крайней мере, в случае загрузки файлов. Они не получают обратные вызовы от NSURLSession класс, который используется. Это, наверное, что-то похожее в вашем случае.

Другие вопросы по тегам