0

Я использую NSOperation для выполнения двух операций. Первая операция - загрузка данных из Интернета, а вторая операция - обновление пользовательского интерфейса.Как по-настоящему отменить операции

Однако, если функция viewDidDisappear запускается пользователем, как я могу остановить процесс загрузки данных? Я попытался

[taskQueue cancellAllOperations], 

, но эта функция только отмечает каждую операцию внутри расторгнутым, а не буквально отменить процесс выполняющийся.

Не могли бы вы предложить некоторые предложения? Заранее спасибо.

ответ

0

Спасибо за искренний ответ. Но я узнаю, что на самом деле

[self performSelectorInBackground:@selector(httpRetrieve) withObject:nil]; 

решить мою проблему. Процесс не нужно отменять. И похоже, что NSOpertaions не работает в фоновом режиме. Таким образом, вернувшись к супер навигационному виду, пока nsoperation все еще работает, пользовательский интерфейс застрянет!

0

AFAIK, нет прямого способа отменить уже выполненный NSOperation. Но вы можете отменить taskQueue, как вы делаете.

[taskQueue cancellAllOperations]; 

А внутри операционного блока, периодически (между логически атомным блоком кода) для проверки isCancelled, чтобы решить, следует ли продолжать дальше.

NSBlockOperation *loadOp = [[NSBlockOperation alloc]init]; 
__weak NSBlockOperation *weakRefToLoadOp = loadOp; 

[loadOp addExecutionBlock:^{ 
    if (!weakRefToLoadOp.cancelled) { 
     // some atomic block of code 1 
    } 
    if (!weakRefToLoadOp.cancelled) { 
     // some atomic block of code 2 
    } 
    if (!weakRefToLoadOp.cancelled) { 
     // some atomic block of code 3 
    } 
}]; 

блочной NSOperation «s должны быть тщательно разделен на субблок, таким образом, что это безопасно прекратить выполнение остальной части блока. При необходимости вы также должны отбросить эффекты выполняемых до сих пор субблоков.

if (!weakRefToLoadOp.cancelled) { 
     // nth sub-block 
    } 
    else { 
     //handle the effects of so-far-executed (n-1) sub-blocks 
    } 
+0

благодарит за ваш ответ. Имеют смысл для меня. – xpeng