NSOperationQueue Blocking Main Thread, UIAccelerometerDelegate не сработает - PullRequest
1 голос
/ 07 октября 2011

У меня есть фрагмент кода, который вызывает [NSOperationQueue waitUntilAllOperationsAreFinished], в котором в очередь я поместил детектор датчика для акселерометра.

Делегату акселерометра необходим главный поток, чтобы ответить на didAccelerate для записи собранных данных. Однако, поскольку очередь блокирует основной метод, кажется, что делегат для Акклерометра никогда не срабатывает. Я также заметил, что все, что принудительно запускается в главном потоке (NSOBject executeSelectorOnMainThread: withObject: waitUntilDone) после того, как происходит блок NSOperationQueue, также никогда не будет запускаться.

Есть ли у меня еще одна опция, которая позволит блокировке происходить, но все же позволяет делегату акселерометра отключиться.

Вот небольшой фрагмент кода:

NSOperation* accelOp = [[AccelerometerOperation alloc] init];
NSOperationQueue* queue = [[NSOperationQueue alloc] init];
[queue addOperation:accelOP];
[queue waitUntilAllOperationsAreFinished];

И для AccelerometerOperation, где я обошел проблему отсутствия конца, когда метод запуска завершается изменением isFinished и isExecuting:

-(void) start{
    [[UIAccelerometer sharedAccelerometer] setDelegate:self];
}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
    NSLog(@"Did accelerate");
}

Если я удаляю waitUntilALlOperationsAreFinished, журнал выводит «Ускорено». Однако при запуске waitUntilFinished даже установка точки останова в DidAccelerate не сработает.

...