为什么CMDeviceMotionHandler从来没有被CoreMotion调用?

我已经将CoreMotion框架包含在我的项目中,并将CoreMotion框架导入到视图控制器的标题中:

#import <CoreMotion/CoreMotion.h> 

然后在-viewDidLoad我有这个简单的testing代码,我在iOS 4.3上运行的iPhone 4上:

 - (void)viewDidLoad { [super viewDidLoad]; CMMotionManager *motionManager = [[CMMotionManager alloc] init]; [motionManager setDeviceMotionUpdateInterval:0.1]; CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) { NSLog(@"foo"); }; [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:motionHandler]; NSLog(@"merde!"); } 

当我在设备上运行项目并移动它时,我从来没有得到“foo”日志。 另外,我尝试在运动处理程序块中设置一个断点,它从不停止。 但是我得到了“merde!” 日志,所以这段代码肯定是执行的。

为什么核心运动不会调用我的处理程序? 我的iPhone 4function正常。 加速度计和陀螺仪在其他应用程序中完美工作。 没有硬件错误。

我有非常类似的代码运行成功,同样适用于iOS的事件处理指南中的可用样本(只有适用于陀螺仪数据的样本)。 但是有一个主要区别:

所有的实现都拥有自己的引用到operationQueue = [[NSOperationQueue currentQueue] retain];队列operationQueue = [[NSOperationQueue currentQueue] retain]; 或者build立自己的。 所以希望这有助于在日志中获得更多的“merde”;-)