deviceMotion не возвращает ничего для шага, крена или рыскания - PullRequest
1 голос
/ 07 марта 2012

Я пытаюсь получить простой код для регистрации высоты тона, крена и рыскания моего iPhone 4S. Он запускает таймер правильно, но значения высоты тона, крена и рыскания всегда отображаются в консоли как 0,0000000. Что мне здесь не хватает? Любая помощь приветствуется!

Вот мой файл .h:

@interface ViewController : UIViewController

@property (nonatomic, retain) CMMotionManager *motionManager;
@property(readonly, weak) CMDeviceMotion *deviceMotion;

-(void)doSomething;

@end

А вот мой файл .m:

#import "ViewController.h"

@implementation ViewController

@synthesize motionManager = _motionManager;
@synthesize deviceMotion = _deviceMotion;

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [_motionManager startDeviceMotionUpdates];
    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];
}

- (void)doSomething
{
    NSLog(@"Reading Device Motion Updates..");
    _deviceMotion = [_motionManager deviceMotion];
    NSLog(@"Roll = %f, Pitch = %f, Yaw = %f", _deviceMotion.attitude.roll, _deviceMotion.attitude.pitch, _deviceMotion.attitude.yaw);
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    [_motionManager stopDeviceMotionUpdates];
}

@end

1 Ответ

1 голос
/ 07 марта 2012

Похоже, вы ничего не присваиваете _motionManager. Вам нужно создать экземпляр этого класса, иначе вы просто отправляете сообщения на nil.

...