У меня есть этот код для добавления экземпляра NSOperation
в очередь
let operation = NSBlockOperation()
operation.addExecutionBlock({
self.asyncMethod() { (result, error) in
if operation.cancelled {
return
}
// etc
}
})
operationQueue.addOperation(operation)
Когда пользователь покидает представление, которое вызвало этот приведенный выше код, я отменяю операцию, выполняя
operationQueue.cancelAllOperations()
При тестировании отмены я на 100% уверен, что отмена выполняется до возврата асинхронного метода, поэтому я ожидаю, что operation.cancelled
будет истинным. К сожалению, этого не происходит, и я не могу понять, почему
Я выполняю отмену viewWillDisappear
ИЗМЕНИТЬ
asyncMethod
содержит сетевую операцию, которая выполняется в другом потоке. Вот почему существует обратный вызов: для обработки возвратов сетевых операций. Сетевая операция выполняется глубоко в иерархии классов, но я хочу обрабатывать NSOperations на корневом уровне.
operation.cancelled
проверку. - person StackOverflower   schedule 30.10.2015cancelled
будет установлена вYES
. Использование точек останова и отладчика не помогает понять, что там происходит. Вы невинная жертва условий гонки :) - person HepaKKes   schedule 08.11.2015