我有URLSessionDataDelegate
将图片上传到服务器,以下是其中的一部分。
当我选择要上传的图像时,会立即初始化URLSession
。
但是,如果用户点击Upload
按钮并且no internet connection
,则我会在Realm中保存图片并在下次启动应用时上传它。
为了上传保存的图像,我创建了另一个名为OfflinePictureUploadClass
的类几乎相同的代码。
如果应用已通过轻扫杀死应用程序退出然后再次启动,则会执行URLSessionDataDelegate
的正确OfflinePictureUploadClass
方法。所以,在这种情况下没有问题。
但是,如果应用程序正常重新启动而没有完全关闭它,它正在执行主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)
}
答案 0 :(得分:0)
这背后的基本思想是您的程序支持后台模式,因此您需要正确支持您的连接。您知道在后台运行一段时间后,您的程序将进入挂起模式。因此,只要您的应用程序转到后台,您就可以从系统中获取额外的时间,并检查应用程序必须在后台运行的时间,以完成或关闭所有连接。检查这些方法:
beginBackgroundTask(withName:expirationHandler:)
问题是当你的应用程序在暂停后唤醒时,它会从停止的同一点继续。因此,您可以获得各种错误,例如会话或连接超时等。