cancelAllOperations не работает для [NSOperationQueue mainQueue] - PullRequest
9 голосов
/ 21 декабря 2011

cancelAllOperations() не работает в mainQueue (метод cancel() не вызывается для объекта NSOperation). Я что-то пропустил? Мне нужно пройти через все операции и вызвать метод cancel(), чтобы он заработал.

Ответы [ 2 ]

5 голосов
/ 13 января 2012

Я также могу подтвердить, что cancelAllOperations не работает в [NSOperationQueue mainQueue] (по крайней мере, в моем симуляторе iOS 5.0).Может быть намеренно спроектирован так, поскольку это общий экземпляр.

Мой простой обходной путь - просто создать подкласс NSOperation или NSBlockOperation без переопределения чего-либо, а затем сделать что-то вроде этого:

-(void)cancelMyOperationsInMainQueue {    
    for (NSOperation* o in [[NSOperationQueue mainQueue] operations]) {
        if ([o isKindOfClass:[MyOperation class]]) {
            [o cancel];
        }
    }
 }
0 голосов
/ 15 февраля 2017

Да, также можно подтвердить, что он не вызывает метод отмены операций, он просто устанавливает isCancelled = YES

Мое решение: [[[NSOperationQueue mainQueue] operations] makeObjectsPerformSelector:@selector(cancel)];

...