2011-12-21 12 views
9

cancelAllOperations() için çalışmaz mainQueue üzerinde çalışmaz (cancel() yöntemi, NSOperation nesnesinde çağrılmamaktadır). Bir şey mi eksik? Tüm işlemlerde yinelemeli ve çalışması için cancel() yöntemini çağırmalıyım.cancelAllOperations, [NSOperationQueue mainQueue]

+1

ben gayet '-cancelAllOperations' işine yaradığını gördük eminim. Belki daha fazla bağlam sağlamanız gerekir. –

+0

benim için açıklandığı şekilde bugün için başarısız, bugün – Bryan

+0

Bu eski bir soru olduğunu biliyorum, ama 'NSURLConnection' için' mainQueue 'kullandığınızı söylüyorsunuz. Muhtemelen NSURLConnection' temelli işlemler için 'mainQueue' değil özel bir kuyruk kullanmak istersiniz (eşzamanlılık derecesini kontrol ederken eşzamanlılıktan zevk almak için' maxConcurrentOperationCount' kullanabilirsiniz). Temsilci tabanlı "NSURLConnection" kullanılıyorsa, hala ana sıradaki bağlantıyı zamanlayabilirsiniz (veya AFNetworking gibi kendi runloop'unuzla kendi "NSThread" inizi oluşturabilirsiniz). Ama muhtemelen operasyonlar için özel bir sıra kullanmak istersiniz. – Rob

cevap

5

Ayrıca cancelAllOperations uygulamasının [NSOperationQueue mainQueue] (en azından iOS 5.0 Simulator'umda) üzerinde çalışmadığından da emin olabilirim. Paylaşılan bir örnek olduğundan, bu şekilde kasten tasarlanabilir.

-(void)cancelMyOperationsInMainQueue {  
    for (NSOperation* o in [[NSOperationQueue mainQueue] operations]) { 
     if ([o isKindOfClass:[MyOperation class]]) { 
      [o cancel]; 
     } 
    } 
} 
0

Evet de operasyonlar yöntemini iptal çağırmaz bunu teyit edebilir, sadece isCancelled = YES ayarlar:

Benim basit bir çözüm sadece bir şey geçersiz kılma olmadan NSOperation veya NSBlockOperation alt sınıf ve sonra böyle bir şey yapmak olduğunu

Çözümümün: [[[NSOperationQueue mainQueue] operations] makeObjectsPerformSelector:@selector(cancel)];