Ios 当uiviewcontroller被取消初始化并且存在活动的urlsessiontask时,如何防止崩溃

Ios 当uiviewcontroller被取消初始化并且存在活动的urlsessiontask时,如何防止崩溃,ios,swift,request-cancelling,deinit,urlsessiontask,Ios,Swift,Request Cancelling,Deinit,Urlsessiontask,当我有一个活动的URLSessionTask,用户按下后退按钮,视图控制器被删除时,我的Swift 3 iOS应用程序发生崩溃。我在返回按钮中调用urlsessiontask上的cancel方法,此时不会发生崩溃,但当用户返回到视图控制器时,应用程序崩溃。如果用户允许url会话任务完成,则不会发生崩溃。有人知道我能做些什么来防止撞车吗?我使用的是iOS 10、Swift 3、Xcode 8。提前感谢。如果下载完成时视图控制器可能不在,请不要将其作为URL会话的代理 这里有一个解决方案: 创建一个

当我有一个活动的URLSessionTask,用户按下后退按钮,视图控制器被删除时,我的Swift 3 iOS应用程序发生崩溃。我在返回按钮中调用urlsessiontask上的cancel方法,此时不会发生崩溃,但当用户返回到视图控制器时,应用程序崩溃。如果用户允许url会话任务完成,则不会发生崩溃。有人知道我能做些什么来防止撞车吗?我使用的是iOS 10、Swift 3、Xcode 8。提前感谢。

如果下载完成时视图控制器可能不在,请不要将其作为URL会话的代理

这里有一个解决方案:

创建一个
DownloadManager
singleton作为URL会话的代理,下载完成后将文件保存到磁盘,记录有关已下载文件的信息,然后使用弱代理属性通知代理


(有些人认为单身是万恶之源,永远不应该被使用。我不是那种人。在我看来,应用程序范围的下载管理器是单身的一个极好的用例。)

在开始时添加回调闭包
[弱自我]
,然后询问自我是否为零