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

标签 ios swift nsurlsessiondatatask nsurlsessionuploadtask

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

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

但是,如果用户点击上传按钮并且没有互联网连接,我会将图像保存在 Realm 中,并在下次应用程序启动时上传它推出。

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

如果应用程序已通过滑动杀死应用程序而退出,然后再次启动,则它正在执行 OfflinePictureUploadClass 的正确 URLSessionDataDelegate 方法。所以,在这种情况下没有问题。

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

那么,我怎样才能克服这个问题,如何取消初始化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)
} 

最佳答案

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

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

background​Time​Remaining

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

关于ios - Swift:当其他 URLSession 初始化时如何取消初始化 URLSession?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43074852/

相关文章:

ios - 如何隐藏第一个单元格顶部的分隔符?

ios - 如何在函数的返回语句中插入 UIImage View ?

iOS Swift - URLSessionDataTask 不会在刷新时获取更新的 JSON 数据

objective-c - NSMutableURLRequest setTimeoutInterval 在 ios 11.0 中不起作用

ios - Swift 字典 UIPickerView (键)和 UITableView (值)

ios - Xamarin:NSMutableUrlRequest 和 NSUrlRequest 与 POST 方法和标题和数据?

ios - 有没有办法遍历字典?

ios - swift 太聪明?使用 XCTest 测试时检查对象类型

ios - iPhone 在后台收集 CoreMotion 数据。 (超过10分钟)

ios - 为什么我的字符串格式化程序使参数 0.00 而不是它的实际值