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

时间:2017-03-28 16:21:21

标签: ios swift nsurlsessiondatatask nsurlsessionuploadtask

我有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)
} 

1 个答案:

答案 0 :(得分:0)

这背后的基本思想是您的程序支持后台模式,因此您需要正确支持您的连接。您知道在后台运行一段时间后,您的程序将进入挂起模式。因此,只要您的应用程序转到后台,您就可以从系统中获取额外的时间,并检查应用程序必须在后台运行的时间,以完成或关闭所有连接。检查这些方法:

begin​Background​Task(with​Name:​expiration​Handler:​)

background​Time​Remaining

问题是当你的应用程序在暂停后唤醒时,它会从停止的同一点继续。因此,您可以获得各种错误,例如会话或连接超时等。