2

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

#import <CoreMotion/CoreMotion.h>

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

4

1 回答 1

1

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

所有实现都持有自己的对操作队列的引用,operationQueue = [[NSOperationQueue currentQueue] retain];或者自己构建。所以希望这有助于在您的日志中获得更多的“merde”;-)

于 2012-06-01T14:37:54.793 回答