Происходит сбой iOS: [состояние NSURLSessionDataTask]: нераспознанный селектор отправлен на экземпляр - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть экран с панелью поиска, когда я покидаю этот экран, я просто отменяю текущий запущенный urlSessionDataTask. Вот мой код, которым я пользуюсь:

override func viewWillDisappear(_ animated: Bool) {

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

    super.viewWillDisappear(animated);
}

Как вы можете видеть в коде, я сначала проверяю, не является ли моя переменная lastURLSessionDataTask не ноль, затем проверяю ее состояние, если выполняется, затем отменяю эту задачу.

Теперь проблема в том, что выдает сбой с деталями: [NSURLSessionDataTask state]: unrecognised selector sent to instance.

Также следует отметить: это не дает сбой каждый раз, это происходит случайно в любое время. Я не уверен, что я делаю неправильно. У кого-нибудь может быть идея? Кто-нибудь сталкивался с этим раньше?

1 Ответ

0 голосов
/ 15 апреля 2019

Поскольку 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)
}
...