У меня есть этот код, чтобы добавить NSOperation
экземпляр очередьПочему мой NSOperation не отменяет?
let operation = NSBlockOperation()
operation.addExecutionBlock({
self.asyncMethod() { (result, error) in
if operation.cancelled {
return
}
// etc
}
})
operationQueue.addOperation(operation)
Когда пользователь покидает представление, которое инициировало этот код выше я отменить операцию делать
operationQueue.cancelAllOperations()
При тестировании гашения, я 100 % sure cancel выполняется до того, как метод async вернется, поэтому я ожидаю, что operation.cancelled
будет правдой. К сожалению, этого не происходит, и я не в состоянии понять, почему
Я выполнение отмены на viewWillDisappear
EDIT
asyncMethod
содержит сетевую операцию, которая работает в другом потоке. Вот почему обратный вызов есть: для обработки возвратов операции сети. Операция сети выполняется глубоко в иерархии классов, но я хочу обрабатывать NSOperations на корневом уровне.
Вы должны быть уверены, что операция.cancelled истинна перед тестом, а не только перед возвратом метода async ... – user3441734
@ user3441734: что вы имеете в виду под «перед тестом»? Невозможно, чтобы операция была отменена до начала асинхронного метода, поскольку логики нет. Если он отменен раньше, он просто не будет запускаться. – StackOverflower
«Я на 100% уверен, что отмена выполняется до того, как метод async вернется, поэтому я ожидаю, что операция будет исправлена». метод async вернется, хотя операция.cancelled будет ложной. он просто не возвращается «рано». – user3441734