我在檢測到加速度計「輕彈」時觸發performSelector afterDelay命令時遇到問題。檢測到移動('已到此處'記錄),但由於某些原因,傳遞給performSelector命令的選擇器未觸發。無法運行performSelector:來自CoreMotion的afterDelay塊
我設置了一個測試塊,併成功運行了一個performSelector,所以我不認爲塊本身導致了問題,這可能與CoreMotion運行的線程有關。 (我必須承認在block/threads/CoreMotion上略顯朦朧)
任何線索將不勝感激。謝謝。
- (void)viewDidLoad
{
[super viewDidLoad];
//Do any additional setup after loading the view, typically from a nib.
motionManager = [[CMMotionManager alloc] init];
if(motionManager.accelerometerAvailable)
{
motionManager.accelerometerUpdateInterval = 0.1;
NSOperationQueue *motionQueue = [[NSOperationQueue alloc] init];
[motionManager startAccelerometerUpdatesToQueue: motionQueue withHandler: ^(CMAccelerometerData *data, NSError *error)
{
float accelerationThreshold = 1.2;
CMAcceleration userAcceleration = data.acceleration;
if (fabs(userAcceleration.x) > accelerationThreshold)
{
NSLog(@"Got here"); //runs
[self performSelector:@selector(test) withObject:nil afterDelay:1.0];
}
}];
}
}
-(void) test
{
NSLog(@"perform selector after delay worked"); //doesn't run
}
您是否獲得了更多的加速計數據?也許NSOperationQueue被阻止等待更多。 – 2012-01-14 01:14:28
非常感謝@DavidDunham的建議,請參閱下面的更多細節,但問題原來是與線程相關的。 – Ted 2012-01-16 15:46:52