CMMotionManager не создает никаких .deviceMotions

Я работаю над приложением AR для своей компании, и оно работает без сбоев, за исключением примерно одного из десяти устройств. (все айфоны 4 и 4s, 5.1.1+)

Когда мы запускаем этот код:

CMDeviceMotion *d = motionManager.deviceMotion;

    if (d == nil && motionManager.deviceMotionActive && motionManager != nil) {
        DLog(@"Device motion is active, but no device motion recieved");
    }

Мы получаем сплошной блок «Движение устройства активно, но движение устройства не получено» на некоторых устройствах, но это кажется совершенно случайным.

Если motionManager.deviceMotionActive истинно и диспетчер движения существует, .deviceMotion должен возвращать CMDeviceMotion. Но он просто возвращает ноль.

Кто-нибудь знает, что может быть причиной этого? Проверка выполняется в моем

- (void)onDisplayLink:(id)sender

person Nils Munch    schedule 28.09.2012    source источник
comment
Подслушиваемые устройства можно найти как среди iphone 4, так и среди 4s.   -  person Nils Munch    schedule 28.09.2012
comment
Вы пытались проверить выделение/освобождение памяти объекта. Может дело в нем. Также проверьте эту ссылку: iphonedevsdk.com/forum/iphone -sdk-разработка/   -  person iCreative    schedule 10.10.2012
comment
У вас есть такая же проблема при использовании блочных методов?   -  person Jonathan    schedule 23.10.2012


Ответы (2)


После некоторого блуждания мы обнаружили, что это произошло из-за нечастой аппаратной/прошивочной ошибки. Самым мудрым было проверить, что для motionManager.deviceMotion установлено значение Nil, а для motionManager.deviceMotionActive — значение true.

person Nils Munch    schedule 07.11.2012
comment
Какой сюрприз... Очередная ошибка Apple. Сожалею, что вы потратили на это столько времени. - person jww; 01.09.2013
comment
как ты это решил? я столкнулся с той же проблемой и не знаю, что делать. я обнаруживаю это и показываю предупреждение. иногда помогает калибровка датчиков с помощью встроенного компаса, но иногда нет... - person shelll; 09.02.2015

Позвоните

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:someFrame];

or

[motionManager startDeviceMotionUpdates];

для запуска обновлений и периодического доступа к объектам CMDeviceMotion путем чтения свойства deviceMotion.

person Amit Singh    schedule 30.10.2012