2011-12-21 9 views
9

cancelAllOperations()は、cancel()メソッドがNSOperationオブジェクトで呼び出されていないmainQueueでは機能しません。何か不足していますか? 私はすべての操作を反復して、それを動作させるにはcancel()メソッドを呼び出す必要があります。cancelAllOperationsは[NSOperationQueue mainQueue]に対して動作しません

+1

私はちょうど罰金 '-cancelAllOperations'作品を見てきましたかなり確信して。たぶん、より多くの文脈を提供する必要があります。 –

+0

私のために失敗しました、今日は – Bryan

+0

これは古い質問ですが、あなたは 'NSURLConnection'に' mainQueue'を使っていると言います。とにかく 'maxConcurrentOperationCount'を使って並行性を楽しむことができますが、並行性の程度を制御しながら' mainQueue'ではなく 'NSURLConnection'ベースの操作用のカスタムキューを使用したいと思うかもしれません。デリゲートベースの 'NSURLConnection'を使用している場合でも、メインキューの接続をスケジュールすることができます(または、AFNetworkingのように独自のrunloopで独自の' NSThread'を作成できます)。しかし、おそらく操作のためにカスタムキューを使用したいと考えています。 – Rob

答えて

5

私は[NSOperationQueue mainQueue]でcancelAllOperationsが動作しないことも確認できます(少なくとも私のiOS 5.0 Simulatorでは)。共有インスタンスなので、意図的にそのように設計されている可能性があります。

私の簡単な回避策は、単に何かを上書きせずにNSOperationまたはNSBlockOperationをサブクラス化することであり、このような何かを:

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

うん、それが業務上のメソッドをキャンセル呼び出すことはありません確認することができ、それだけでisCancelled = YESを設定し、

私のソリューション:[[[NSOperationQueue mainQueue] operations] makeObjectsPerformSelector:@selector(cancel)];

関連する問題