2012-09-28 8 views
8

Estoy trabajando en una aplicación AR para mi empresa, y está funcionando sin problemas, excepto en uno de cada diez dispositivos. (Todo el iphone 4 y 4s, 5.1.1+)CMMotionManager no produce ninguna .deviceMotions

Cuando ejecutamos este código:

CMDeviceMotion *d = motionManager.deviceMotion; 

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

Tenemos un bloque sólido de "movimiento del dispositivo está activo, pero hay movimiento dispositivo recibió" en algunos de los dispositivos, pero parece completamente aleatorio.

Si motionManager.deviceMotionActive es verdadero y el gestor de movimiento existe, el .deviceMotion debe devolver un CMDeviceMotion. Pero simplemente devuelve nada.

¿Alguien tiene una idea de lo que podría causar esto? El cheque se está ejecutando en mi

- (void)onDisplayLink:(id)sender 
+0

Los dispositivos con errores se encuentran entre los iPhone 4 y 4s por igual. –

+0

Ha intentado verificar la asignación/desasignación de memoria de objeto. Puede estar ahí está el problema. También consulte este enlace: http://iphonedevsdk.com/forum/iphone-sdk-development/103541-cmdevicemotion-flick-gesture.html – iCreative

+0

¿Tiene el mismo problema cuando usa los métodos basados ​​en bloques? – Jonathan

Respuesta

5

Después de roaming, descubrimos que esto se debía a un error de hardware/firmware poco frecuente. Lo más acertado fue verificar que motionManager.deviceMotion sea Nil y que motionManager.deviceMotionActive sea verdadero.

+1

Qué sorpresa ... Otro error de Apple. Lamento escuchar que perdiste tanto tiempo en eso. – jww

+0

¿cómo resolviste esto? Estoy enfrentando el mismo problema y no sé qué hacer. Lo detecto y muestro una advertencia. a veces, la calibración de sensores con la aplicación de brújula integrada ayuda, pero a veces no ... – shelll

-1

Llame al

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:someFrame]; 

o

[motionManager startDeviceMotionUpdates]; 

método para empezar y periódicamente actualizaciones de acceder a los objetos CMDeviceMotion leyendo la propiedad deviceMotion.

Cuestiones relacionadas