2012-09-28 14 views
8

Sto lavorando su un'applicazione AR per la mia azienda e funziona senza intoppi, tranne che su circa un dispositivo su dieci. (Tutto iphone 4 e 4s, 5.1.1+)CMMotionManager non produce alcun .deviceMotions

Quando si esegue questo codice:

CMDeviceMotion *d = motionManager.deviceMotion; 

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

otteniamo un blocco solido di "motion dispositivo è attivo, ma nessun movimento del dispositivo ricevuti" su alcuni di i dispositivi, ma sembra del tutto casuale.

Se è vero e il gestore di movimento esiste, l'oggetto .deviceMotion deve restituire un CMDeviceMotion. Ma restituisce solo zero.

Qualcuno ha idea di cosa potrebbe causare questo? Il controllo viene eseguito nel mio

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

I dispositivi bugged possono essere trovati tra iPhone 4 e 4s allo stesso modo. –

+0

Si è provato a controllare l'allocazione/deallocazione della memoria oggetto. Potrebbe essere lì è il problema. Controlla anche questo link: http://iphonedevsdk.com/forum/iphone-sdk-development/103541-cmdevicemotion-flick-gesture.html – iCreative

+0

Hai lo stesso problema quando usi i metodi basati sui blocchi? – Jonathan

risposta

5

Dopo un po 'di roaming, abbiamo scoperto che ciò era dovuto a un errore hardware/firmware non frequente. La cosa più saggia era verificare che motionManager.deviceMotion fosse Nil e che motionManager.deviceMotionActive fosse vero.

+1

Che sorpresa .... Un altro bug di Apple. Mi spiace sentirlo hai perso così tanto tempo su di esso. – jww

+0

come hai risolto questo? sto affrontando lo stesso problema e non so cosa fare. lo rilevo e mostro un avvertimento. a volte la calibrazione dei sensori con l'app della bussola integrata aiuta, ma a volte no ... – shelll

-1

chiamata al metodo

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:someFrame]; 

o

[motionManager startDeviceMotionUpdates]; 

per iniziare gli aggiornamenti e periodicamente accedere agli oggetti CMDeviceMotion leggendo la proprietà deviceMotion.