CMMotionManager не предоставляет никаких значений

В настоящее время я пытаюсь разработать приложение для iOS, которое извлекает данные магнитометра из CMMotionManager. Я создал очень простое тестовое приложение, но даже оно не работает на моем iPhone 5. Код выглядит следующим образом:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CMMotionManager *motionManager = [[CMMotionManager alloc] init];

    [motionManager setMagnetometerUpdateInterval:1.0/30.0f];
    [motionManager  startMagnetometerUpdatesToQueue:[[NSOperationQueue alloc] init]
                    withHandler:^(CMMagnetometerData *magnetometerData, NSError *error) {
        NSLog(@"eek");
    }];
}

Проблема в том, что обработчик просто никогда не вызывается. Аналогично, вызов [motionManager startMagnetometerUpdates], а затем опрос magnetometerData не работает (возвращает nil). При выполнении [motionManager isMagnetometerActive] результатом всегда будет false.

Я застрял здесь, есть идеи? Я не понимаю, почему код не должен работать. Должен ли я каким-либо образом сначала запрашивать доступ к компасу? В документации CMMotionManager ничего не упоминается, кроме того, что я сделал.


person BlackWolf    schedule 04.12.2013    source источник
comment
anka решила проблему, но, кроме того, вы также хотите проверить magnetometerAvailable, чтобы вы могли обрабатывать сценарии, в которых он недоступен.   -  person Rob    schedule 05.12.2013
comment
Вы абсолютно правы, конечно, я просто опустил это для проверки.   -  person BlackWolf    schedule 05.12.2013


Ответы (1)


Я думаю, что ваш motionManager будет выпущен автоматически. Добавьте переменную экземпляра или свойство, чтобы менеджер движения все равно оставался.

Также проверьте, возвращает ли magnetometerAvailable YES, в противном случае возможно, что ваше устройство не поддерживает магнитометр.

person anka    schedule 04.12.2013