cmdevicemotion停止提供更新

时间:2013-02-12 19:29:01

标签: ios core-motion cmmotionmanager

我的代码中有一些奇怪的问题,我无法弄清楚并需要一些帮助。我在AppDelegate中定义了一个CMMotionManager。在我的视图控制器中,我定义了一个属性:

    @property (nonatomic, retain) CMMotionManager *motionManager;

然后使用此代码启动更新:

    - (void)startMyMotionDetect
    {
motionManager = [(AppDelegate *)[[UIApplication sharedApplication] delegate] sharedManager];

motionManager.deviceMotionUpdateInterval = 1.0/60.0;

[motionManager startDeviceMotionUpdates];
timer = [NSTimer scheduledTimerWithTimeInterval:20/60 target:self selector:@selector(handleDeviceMotion) userInfo:nil repeats:YES];

}

但是,handleDeviceMotion只调用了几次,然后停止更新deviceMotion输出。我已将代码更改为推送样式(块代码),但在这种情况下,块不会被执行!块中的测试NSLog注释永远不会被执行。这是代码的样子:

motionManager = [(AppDelegate *)[[UIApplication sharedApplication] delegate] sharedManager];

motionManager.deviceMotionUpdateInterval = 1.0/60.0;

[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *dMotion, NSError *error)
 {
     NSLog(@"test 1");

    [self performSelectorOnMainThread:@selector(handleDeviceMotion) withObject:nil waitUntilDone:YES];

 }];

以下是handleDeviceMotion代码的外观:

- (void)handleDeviceMotion//:(CMDeviceMotion *)dMotion
{

if ([motionManager isDeviceMotionActive])
{
    NSLog(@"test");
}

....}

使用第一种方法,我看到“test”打印几次然后停止。

我认为通过将motionManager保留为属性,我不必担心它会被释放但是它似乎已经被释放到了某个地方(或者你认为其他事情正在发生?)。

非常感谢你的帮助。

0 个答案:

没有答案