在我的应用程序中,我尝试使用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/