调用[operation cancelAllOperations]时,NSOperationQueue不会停止

时间:2014-05-29 09:58:50

标签: ios objective-c xcode nsoperation nsoperationqueue

我在iOS应用中创建了这个队列,我想阻止它:

在我的.h文件中:

NSOperationQueue *uhm;

在我的.m文件中: 在viewDidLoad中:NSOperationQueue *uhm = [[NSOperationQueue alloc] init];

在我的方法中:

[uhm addOperation:[NSBlockOperation blockOperationWithBlock: ^{
        … //Here I do operations that retrive data from my server
        [[NSOperationQueue mainQueue] addOperationWithBlock: ^{
            [self.tableView reloadData];
        }];
    }
    }]];

但是当我调用[uhm cancelAllOperations]时,它只是将布尔值isCancelled设置为YES,但不会停止执行队列! 请帮帮我!

2 个答案:

答案 0 :(得分:4)

取消操作并不会实际停止任何正在执行的操作。

它只会阻止新的启动。

您必须在操作本身中手动停止任何当前操作。

例如,如果您有代码收集下载的数据,那么在连接数据之前检查操作是否被取消。

如果操作被取消,则结束操作。

enter image description here

有很多方法可以做到这一点。这取决于你的操作内部。

答案 1 :(得分:1)

就像你提到的那样,你从另一种方法调用cancelAllOperations,而你分配的对象不在你的 .h 中,所以你要调用另一个对象,而不是你初始化的那个“嗡嗡声”

所以试着宣布NSOperationQueue *嗯;在你的.h所以它会是全局的然后你可以调用[uhm cancelAllOperations];来自你想要的任何方法。