iOS崩溃说:[NSURLSessionDataTask状态]:无法识别的选择器已发送到实例

时间:2019-04-15 05:59:40

标签: ios swift nsurlsession nsurlsessiondatatask

我有带搜索栏的屏幕,当我离开该屏幕时,我只是取消正在进行的urlSessionDataTask。这是我正在使用的代码:

override func viewWillDisappear(_ animated: Bool) {

    if self.lastURLSessionDataTask != nil, self.lastURLSessionDataTask!.state == .running{
       self.lastURLSessionDataTask!.cancel();
       self.lastURLSessionDataTask = nil;
    }

    super.viewWillDisappear(animated);
}

正如您在代码中看到的那样,我首先检查我的lastURLSessionDataTask变量是否不为nil,然后检查其状态(如果正在运行)然后取消该任务。

现在的问题是,它使崩溃崩溃的细节为:[NSURLSessionDataTask state]: unrecognised selector sent to instance

还要注意:它并不是每次都崩溃,而是在任何时间随机出现。我不确定,我在做什么错。任何人都可以有任何想法吗?有人更早遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

由于lastURLSessionDataTask是URLSessionTask的可选类型,因此您不应该强制使用guard语句

override func viewWillDisappear(_ animated: Bool) {
    guard let task = lastURLSessionDataTask, task.state == .running else { super.viewWillDisappear(animated); return }
    task.cancel()
    task = nil
}

或通过

检查值
override func viewWillDisappear(_ animated: Bool) {
    if let task = lastURLSessionDataTask, task.state == .running {
        task.cancel()
        task = nil
    }
    super.viewWillDisappear(animated)
}