我调用 URLSession.share.datatask 并且在它完成之前用户弹出 uiviewcontroller

I call URLSession.share.datatask and before it can complete the user pops the uiviewcontroller

我不确定如何防止我的应用程序出错。我需要使用 URLSession.shared.dataTask 调用服务器,如果我允许它完成,它会工作得很好。但是,如果我在 URLSession.shared.dataTask 完成之前将 uiviewcontroller 弹出堆栈,则会出现 运行 时间错误,因为 viewcontroller 已不存在。它出现在 json 解析和网络调用的不同地方。一般在回调或者网络调用失败时显示错误。有谁知道如何在 uiviewcontroller 取消时停止网络调用,或者在网络调用代码中检测到 uiviewcontroller 已经消失,所以我不调用回调。我正在使用 Xcode 8 和 iOS 10 以及 Swift 3。谢谢。

在你 弹出你的 VC 之前,调用这些:

[dataTask cancel]
dataTask = nil // if needed

(您可能需要转换 o Swift,因为这些在 Obj-c 中,但您明白了)

如果你愿意,你可以 also detect if it is the last VC 你正在弹出,如果你愿意,可以在 viewWillDisappear 方法中相应地执行此操作。