gpt4 book ai didi

ios - 重新启动 NSOperation 的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 05:37:45 24 4
gpt4 key购买 nike

我正在尝试将文件上传到 AWS S3 存储桶。如果由于任何原因上传失败,我希望能够重试几次。

我有一个自定义 NSOperation,其主要方法创建一个 AWSS3TransferManagerUploadRequest() 实例。在 AWSS3TransferManager 的帮助下,我开始上传。

如果失败,我应该在task.completionBlock中调用main()吗?或者我应该拥有 NSOperation 的completionBlock,并尝试从那里重新启动操作?为了清楚起见,这里有一些代码

class PhotoUploadOperation: NSOperation {
var photoURL: NSURL!
var fileName: String!
var festival: PFObject!
var sleepTime: NSTimeInterval = 2.0
init(photoURL: NSURL, withFileName fileName:String, forFestival festival: PFObject) {
super.init()
self.photoURL = photoURL
self.fileName = fileName
self.festival = festival
}

override func main() {
let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest.bucket = "festivals123";
uploadRequest.key = fileName
uploadRequest.contentType = "image/jpeg"
uploadRequest.body = photoURL
uploadRequest.ACL = .PublicRead
AWSS3TransferManager.registerS3TransferManagerWithConfiguration(DataManager.shared.awsConfiguration, forKey: "ID1")
let transferManager = AWSS3TransferManager.S3TransferManagerForKey("ID1")

let task = transferManager.upload(uploadRequest)
task.continueWithBlock { (task: AWSTask!) -> AnyObject! in
if (task.faulted) {
print("now we need to restart upload for \(self.fileName)")
NSThread.sleepForTimeInterval(self.sleepTime)
if (self.sleepTime <= 2 ) {
self.sleepTime = self.sleepTime*2
}
self.main()
}

return task
}
}
}

最佳答案

询问了几个同事后,我猜的办法是,让操作失败完成,然后创建另一个操作来执行相同的任务。

关于ios - 重新启动 NSOperation 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33798411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com