如何动态识别Nsoperation。
我正在创建一个NSoperation子类
- (id)initWithConnectDevice:(ConnectDevice *)cDevice toPeripheral:(CBPeripheral*)peripheral oPerationIndex:(int) index{
if (self = [super init]) {
operationIndex = index;
executing = NO;
finished = NO;
self.connectDevice = cDevice;
[self.connectDevice setDelegate:self];
self.connectedPeripheral = peripheral;
}
return self;
}
-(BOOL)isConcurrent{
return YES;
}
- (BOOL)isExecuting {
return executing;
}
- (BOOL)isFinished {
return finished;
}
-(void) terminateOperation {
[self willChangeValueForKey:@"isFinished"];
[self willChangeValueForKey:@"isExecuting"];
finished = YES;
executing = NO;
[self didChangeValueForKey:@"isExecuting"];
[self didChangeValueForKey:@"isFinished"];
}
- (void)start {
@autoreleasepool {
if (self.isCancelled){
[timer invalidate];
[self willChangeValueForKey:@"isFinished"];
finished = YES;
[self didChangeValueForKey:@"isFinished"];
return;
}
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] run];
}
}
-(void)timerFired:(id)sender{
NSLog(@"timerFired");
}
我正在扫描BLE设备。例如,我将找到3个设备,将创建3个按钮。
每次点击该按钮时,我都会打电话给这个班级。这意味着,当我点击按钮时,我正在连接到蓝牙设备并从该设备获取数据,这就是为什么我在使用计时器开始方法。
就像我有多个蓝牙设备一样,每当我点击按钮时,我想创建操作队列类的多个实例。
现在,我想确定哪个数据来自哪个线程。 你能帮帮我吗......
这就是我从viewcontroller
调用类的方法 OperationQueue *queue = [[OperationQueue alloc] initWithConnectDevice:connectDevices toPeripheral:peripheral oPerationIndex:operationIndex];
queue.delegate = self;
[[[AppDelegate app] mainQueue] addOperation:queue];
operationIndex = operationIndex+1;
答案 0 :(得分:1)
您的每个操作都有两个标识属性 - 连接的设备和索引。当计时器触发时,根据您要对数据执行的操作,您可以使用这些属性来指示数据的来源。
你可以在操作上有一个委托属性,当定时器触发时接受设备和接收的数据作为参数时调用委托方法,或者你的操作可以有一个块属性,这需要一个块来每当接收到数据时执行 - 该块将设备和接收的数据作为参数。
假设您想在接收数据时更新UI,请务必调用委托方法或在主线程上执行块。