我有一段调用[NSOperationQueue waitUntilAllOperationsAreFinished]的代码,在这个队列中,我为Accelerometer放置了一个传感器检测器。
加速度计委托需要主线程才能响应didAccelerate来记录收集的数据。但是,由于Queue阻塞了main方法,似乎Acclerometer的代表永远不会被触发。我还注意到在NSOperationQueue块发生后,强制在主线程上运行的任何东西(NSOBject performSelectorOnMainThread:withObject:waitUntilDone),也将永远不会运行。
我是否有另一个可以阻止发生的选项,但仍允许加速度计代表关闭。
以下是一段快速代码:
NSOperation* accelOp = [[AccelerometerOperation alloc] init];
NSOperationQueue* queue = [[NSOperationQueue alloc] init];
[queue addOperation:accelOP];
[queue waitUntilAllOperationsAreFinished];
对于AccelerometerOperation,我通过修改isFinished和isExecuting来绕过了在start方法结束时没有结束的问题:
-(void) start{
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
}
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
NSLog(@"Did accelerate");
}
如果我删除了waitUntilALlOperationsAreFinished,则日志会显示“Did accelerated”。但是,在waitUntilFinished运行时,即使在DidAccelerate中设置一个断点也不会触发。