SORU
26 HAZİRAN 2009, Cuma


NSOperationQueue tüm görevler tamamlandığında bildirim almak

NSOperationQueue waitUntilAllOperationsAreFinished, ama bunun için eşzamanlı olarak beklemek istemiyorum. Ben sadece sıra tamamlandığında UI ilerleme göstergesi gizlemek istiyorum.

Bunu yapmanın en iyi yolu nedir?

Gidemem gönderme bildirimleri benim NSOperations, çünkü bilmiyorum hangisi olacak son ve [queue operations] olmayabilir henüz boş (ya da daha kötüsü - depolanmışsa) bildirim alınır.

CEVAP
17 NİSAN 2010, CUMARTESİ


KVO sıranız operations özelliğini gözlemlemek için kullanın, sonra kuyruğunu tamamlamış [queue.operations count] == 0 kontrol ederek anlayabilirsiniz.

Size sıra Kur bu işi:

[self.queue addObserver:self forKeyPath:@"operations" options:0 context:NULL];

O zaman yap observeValueForKeyPath: Bu

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
                         change:(NSDictionary *)change context:(void *)context
{
    if (object == self.queue && [keyPath isEqualToString:@"operations"]) {
        if ([self.queue.operations count] == 0) {
            // Do something here when your queue has completed
            NSLog(@"queue has completed");
        }
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object 
                               change:change context:context];
    }
}

(NSOperationQueue özelliği queue) adlı varsayarak


4.0 şimdi NSOperationQueue.operationCount bir özelliği vardır iOS, doktorlara göre KVO uyumlu olan. EDİT: Bu cevap hala iOS 4.0 ancak çalışacak, hala geriye uyumluluk için yararlı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Edgar flores

    Edgar flores

    7 HAZİRAN 2006
  • engineerguy

    engineerguy

    10 Ocak 2010
  • Learn Math Tutorials

    Learn Math T

    20 Kasım 2011