2011-12-21 24 views
9

cancelAllOperations() không hoạt động trên mainQueue (phương pháp cancel() không được gọi trên đối tượng NSOperation). Tui bỏ lỡ điều gì vậy? Tôi phải lặp qua tất cả các hoạt động và gọi phương thức cancel() để làm cho nó hoạt động.cancelAllOperations không hoạt động cho [NSOperationQueue mainQueue]

+1

Chắc chắn tôi đã thấy '-cancelAllOperations' hoạt động tốt. Có thể bạn cần cung cấp thêm ngữ cảnh. –

+0

không chỉ cho tôi theo cách được mô tả, hôm nay – Bryan

+0

Tôi biết đây là một câu hỏi cũ, nhưng bạn nói rằng bạn đang sử dụng 'mainQueue' cho' NSURLConnection'. Bạn có thể muốn sử dụng hàng đợi tùy chỉnh cho các hoạt động dựa trên 'NSURLConnection', không phải' mainQueue', dù sao (bạn có thể sử dụng 'maxConcurrentOperationCount' để sử dụng đồng thời trong khi kiểm soát mức độ đồng thời). Nếu sử dụng 'NSURLConnection' dựa trên ủy nhiệm, bạn vẫn có thể lên lịch kết nối trên hàng đợi chính (hoặc tạo ra' NSThread' của riêng bạn với runloop riêng của nó, giống như AFNetworking). Nhưng bạn có thể muốn sử dụng hàng đợi tùy chỉnh cho các hoạt động, bản thân họ. – Rob

Trả lời

5

Tôi cũng có thể xác nhận rằng cancelAllOperations không hoạt động trên [NSOperationQueue mainQueue] (ít nhất là trên Trình mô phỏng iOS 5.0 của tôi). Có thể được thiết kế cố ý như thế vì nó là một cá thể được chia sẻ.

workaround đơn giản của tôi là chỉ để phân lớp NSOperation hoặc NSBlockOperation mà không trọng bất cứ điều gì và sau đó làm một cái gì đó như thế này:

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

Ừ cũng có thể khẳng định nó không gọi hủy bỏ phương pháp trên các hoạt động, nó chỉ đặt isCancelled = YES

Giải pháp của tôi: [[[NSOperationQueue mainQueue] operations] makeObjectsPerformSelector:@selector(cancel)];

Các vấn đề liên quan