在 swift 中创建 URLSession 冻结应用程序

Creation of URLSession freezing the app in swift

我正在为后台下载任务创建一个 URLSession,如下所示,

class ViewController: UIViewController, URLSessionDelegate {
    var session: URLSession!
    lazy var downloadsSession: URLSession = {
      let configuration = URLSessionConfiguration.background(withIdentifier:
        "bgDownloader")
//        configuration.sessionSendsLaunchEvents = true
        let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
      return session
    } ()

    override func viewDidLoad() {
        super.viewDidLoad()
        print("started")
        session = downloadsSession
        print("done")
        // Do any additional setup after loading the view.
    }
}

每当控件点击 viewdidload() 中的 let session = URLSession(...) 行时,应用程序就会冻结。有帮助吗?

发生了一些事情,因为仅此代码不足以显示问题。例如。我 运行 你的项目并看到两个 print 语句:

这是在 Xcode 11.4.1 (11E503a) 和 iPhone 11 Pro Max 模拟器 运行 on macOS Catalina 10.15.4 (19E287) 中,虽然我用过这个许多不同 Xcode 版本的模式,没有发生意外。

如果您有奇怪的行为,您可以:

  • 重置模拟器:选择“设备”»“清除所有内容和设置...”»“清除”。

  • 清空派生数据:当出现莫名其妙的行为时,清空派生数据文件夹是明智的做法(“Xcode”»“首选项...”»“位置”,点击派生数据路径旁边的箭头;退出 Xcode;删除派生数据文件夹中的所有内容;然后重新启动 Xcode)。我无法想象这会有所帮助,但是当您获得 incorrect/inexplicable 行为时,这是一个很好的第一步。

  • 重启 and/or 试试其他电脑:如果你真的仍然看到这个行为,重启你的机器,在其他人的电脑上试试,等等。但是实例化没有任何问题后台会话。

(不用说,从长远来看,这个下载会话不应该是视图控制器的 属性,但这是一个更大的问题,一旦你解决了眼前的问题,你就可以解决.)