【问题标题】:Creation of URLSession freezing the app in swift快速创建 URLSession 冻结应用程序
【发布时间】:2020-08-31 14:22:04
【问题描述】:

我正在为后台下载任务创建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(...) 行时,应用程序就会冻结。有什么帮助吗?

【问题讨论】:

  • 您能分享一下您调用此 URLSession 的代码吗?
  • 首先,您确定您的代码中没有breakpoints 吗?其次,把它放在一个空白项目中,你会发现这段代码不足以导致它冻结。问题出在其他地方。
  • @Rob 我创建了一个空白项目并尝试了它。它仍然很冷。更新了原始帖子以包含整个代码。
  • 尝试在主线程上运行? DispatchQueue.main.async { //code }
  • @Rob 我已将示例空白项目上传到bitbucket.org/gouthamvgk/test/src/master。非常感谢您的 cmets 和帮助。我正在使用 XCODE 11.4 和 iphone 11 pro max 模拟器

标签: swift xcode urlsession


【解决方案1】:

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

这是在 macOS Catalina 10.15.4 (19E287) 上运行的 Xcode 11.4.1 (11E503a) 和 iPhone 11 Pro Max 模拟器中,尽管我已经将这种模式用于许多不同的 Xcode 版本,没有发生任何意外。

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

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

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

  • 重新启动和/或尝试其他计算机:如果您仍然看到此行为,请重新启动您的计算机,在其他人的计算机上尝试,等等。但是后台会话的实例化没有任何问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2015-05-09
    • 2013-09-26
    • 2014-09-29
    相关资源
    最近更新 更多