2

プロジェクトに CoreMotion フレームワークを含め、View Controller のヘッダーに 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」ログが表示されません。また、モーション ハンドラ ブロックにブレークポイントを設定しようとしましたが、そこで停止することはありません。しかし、私は「メルデ!」を手に入れます。ログに記録されるため、このコードは確実に実行されます。

コアモーションがハンドラーを呼び出さないのはなぜですか? 私のiPhone 4は機能しています。加速度計とジャイロは、他のアプリで完全に機能します。ハードウェアのバグはありません。

4

1 に答える 1

1

私は非常によく似たコードを正常に実行しました。同じことがiOSのイベント処理ガイドで利用可能なサンプルにも当てはまります(ジャイロデータに適切なものだけがあります)。ただし、大きな違いが1つあります。

すべての実装は、独自の操作キューへの独自の参照を保持するoperationQueue = [[NSOperationQueue currentQueue] retain];か、独自に構築します。したがって、これがログに「merde」以上のものを取得するのに役立つことを願っています;-)

于 2012-06-01T14:37:54.793 に答える