从 NSOperationQueue 获取特定的 NSOperation

Ran*_*ndy 5 nsoperation nsoperationqueue ios

你好呀,

在我的应用程序中,我创建NSOperations并将它们添加到NSOperationQueue. 有时,我想从操作队列中取消某些特定操作,这就是为什么我为 NSOperation 子类定义了一个标识符属性:

@property (nonatomic, assign) NSString *identifier;
Run Code Online (Sandbox Code Playgroud)

但是,当我循环进入队列的操作并且想要将操作的标识符与我想要获取的操作的标识符进行比较时,我得到了一个EXC_BAD_ACCESS指出 if 条件的提示:

for (MyCustomNSOperationClass *operation in self.myOperationQueue.operations)
{
     NSString *identifier = [self getRelatedIdentifier];
     if ([operation.identifier isEqualToString:identifier])
     {
           [operation cancel];
     }
}
Run Code Online (Sandbox Code Playgroud)

操作的标识符应该类似于33a37fb0-8f77-0132-6c0b-5254005d9147但当它崩溃时,它类似于0x7be4af00(当我使用时po operation.identifier)。我说当它崩溃时,因为它并不总是崩溃,当它不崩溃时,那么标识符是正确的(我不确定是否非常清楚......)。

由于我是 NSOperation 的新手,我想知道是否还有其他方法可以实现我想做的事情?

提前致谢 !

Ism*_*ail 1

最好有一个数组operations:[MyCustomNSOperationClass](或字典operations:[String: MyCustomNSOperationClass])来保存对队列中所有操作的引用,然后直接取消它,而不用在队列中搜索它。