我有带搜索栏的屏幕,当我离开该屏幕时,我只是取消正在进行的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
。
还要注意:它并不是每次都崩溃,而是在任何时间随机出现。我不确定,我在做什么错。任何人都可以有任何想法吗?有人更早遇到过这个问题吗?
答案 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)
}