为什么这个CMDeviceMotionHandler从未被CoreMotion调用过?

时间:2012-05-31 11:25:22

标签: iphone ios core-motion

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

#import <CoreMotion/CoreMotion.h>

然后在-viewDidLoad中我有这个简单的测试代码,我在iOS 4的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 4功能齐全。加速度计和陀螺仪在其他应用程序中完美运行。没有硬件错误。

1 个答案:

答案 0 :(得分:1)

我有非常相似的代码运行成功,同样适用于Event Handling Guide for iOS中的可用样本(陀螺仪数据只有一个合适的样本)。但是有一个主要区别:

所有实现都使用operationQueue = [[NSOperationQueue currentQueue] retain];拥有自己对opereation队列的引用,或者构建自己的实现。所以希望这有助于在你的日志中获得超过'merde'; - )