在我的应用程序中,我尝试使用NSOperationQueue为网络服务交互实现AFNetworking。我正在队列中一个一个添加NSOperation。我想随时取消特定操作。为此,我想为该操作设置一些唯一的键。那么,有什么方法可以实现呢?

最佳答案

创建一个 NSOperation 子类并设置一个属性。

如果应用程序的最小部署大于iOS 8,则可以直接使用 .name 属性。

NSOperationQueue *queue = [NSOperationQueue mainQueue];
if (![[[queue operations] valueForKey:@"name"] containsObject:@"WS"])
{
    NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
        //your task
    }];
    op.name = @"Unique id";
    [queue addOperation:op];
}
else
{
    NSIndexSet *indexSet = [[queue operations] indexesOfObjectsPassingTest:
                            ^ BOOL(NSBlockOperation *obj, NSUInteger idx, BOOL *stop)
                            {
                                if ([obj.name isEqualToString:@"Unique id"])
                                {
                                    return YES;
                                } else
                                {
                                    return NO;
                                }
                                *stop = YES;
                            } ];

    if (indexSet.firstIndex != NSNotFound)
    {
        NSBlockOperation *queryOpration = [[queue operations] objectAtIndex:indexSet.firstIndex];
        [queryOpration cancel];
    }
}

如果该应用程序不适用于iOS 8或更高版本,则可以创建NSOperation的子类并设置一个身份,并可以使用该值进行查询:
@interface WSOperation: NSOperation
@property (nonatomic, strong) NSString* operationID;
@end

关于ios - 如何在iOS中为NSOperation设置唯一键值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28404039/

10-13 05:17