Swift:当其他 URL 初始化时,如何取消初始化 URLSession?



我有一个将图片上传到服务器URLSessionDataDelegate,以下是其中的一部分。

当我选择要上传的图像时,URLSession会立即初始化。

但是,如果用户点击Upload按钮并且有no internet connection,我将图像保存在 Realm 中,并在下次启动应用程序时上传。

为了上传保存的图像,我创建了另一个名为OfflinePictureUploadClass几乎相同代码的类。

如果应用程序已通过滑动终止应用程序退出,然后再次启动,则它正在执行正确的URLSessionDataDelegateOfflinePictureUploadClass方法。因此,在这种情况下没有问题。

但是,如果应用程序在没有完全关闭的情况下正常重新启动,则它正在执行主PictureUpload类的委托方法,然后上传失败。

那么,我该如何克服这个问题,如何取消初始化URLSessionDataDelegate,这是在选择图像时初始化的。

下面的代码只是为了显示选择图像时初始化的内容。

fileprivate var DefaultSession: Foundation.URLSession!
fileprivate var BackgroundSession: Foundation.URLSession!
override init() {
super.init()
// default session to fetch
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = 20
DefaultSession = Foundation.URLSession(configuration: config, delegate: nil, delegateQueue: .main)
// background session
let backgroundConfiguration = "com.xxx.backgroundconfiguration.upload"
let configuration = URLSessionConfiguration.background(withIdentifier: backgroundConfiguration)
BackgroundSession = Foundation.URLSession(configuration: configuration, delegate: self, delegateQueue: .main)
} 

这背后的基本思想是你的程序支持后台模式,所以你需要正确支持你的连接。您知道在后台运行一段时间后,程序将进入挂起模式。因此,每当应用进入后台时,您都可以向系统请求额外的时间,并检查应用必须在后台运行以完成或关闭所有连接的时间。检查以下方法:

beginBackgroundTask(withName:expirationHandler:)

背景剩余时间

问题是,当您的应用在挂起后唤醒时,它会从停止的同一点继续。因此,您可能会遇到各种错误,例如会话或连接超时。

相关内容

  • 没有找到相关文章

最新更新