为什么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”;-)