1

Когда мой наблюдатель говорит мне, что операций больше нет, функция не вызывается (performSelector ...). Забавно, что NSLog («очередь очереди» завершена ») регистрируется правильно.NSOperationQueue закончил не запускать новый метод

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
        change:(NSDictionary *)change context:(void *)context 
{ 
if (object == self.operationQueue && [keyPath isEqualToString:@"operations"]) { 
    if ([self.operationQueue.operations count] == 0) 
    { 
     [self performSelector:@selector(refreshCollectionView) withObject:nil afterDelay:0.2]; 
     // Do something here when your queue has completed 
     NSLog(@"queue has completed"); 

    } 
} 
else { 
    [super observeValueForKeyPath:keyPath ofObject:object 
          change:change context:context]; 
} 
} 

EDIT

Понял:

dispatch_async(dispatch_get_main_queue(), ^{ 
      [self performSelector:@selector(refreshCollectionView) withObject:nil afterDelay:0.2]; 
      }); 

Незнайка почему performSelectorOnMainThread ... не работал, но он работает таким образом.

ответ

1

Если ваш наблюдатель запускается в том же потоке, что и в очереди, вполне вероятно, что поток очереди будет получен после завершения. Поскольку -performSelector: ... afterDelay: требуется цикл запуска, он, вероятно, выпадает на пол.

Поскольку вы все равно обновляете пользовательский интерфейс, выполните этот селектор в основном потоке.

+0

любое предложение как? – user1832330

+0

получил его, но doesnt работает в любом случае:/любой метод не запускается (даже если я помещаю вещи из refreshCollectionView внутри очереди в полный комплект) – user1832330

Смежные вопросы