2012-09-28 27 views
8

Şirketim için bir AR uygulaması üzerinde çalışıyorum ve on cihazdan bir tanesinin dışında sorunsuz çalışıyor. Bu kodu çalıştırdığınızda (bütün iphone 4 ve 4s, 5.1.1+)CMMotionManager üretmiyor .deviceMotions

:

CMDeviceMotion *d = motionManager.deviceMotion; 

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

Biz bazı "Cihaz hareket aktiftir, ancak hiçbir cihaz hareketi alınan" sağlam bir blok almak cihazlar, ama tamamen rastgele görünüyor.

motionManager.deviceMotionActive doğruysa ve hareket yöneticisi varsa, .deviceMotion bir CMDeviceMotion döndürmelidir. Ama sadece nil döndürür.

Bunun neye sebep olabileceği konusunda bir fikri olan var mı? çek benim

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

Bugged cihazlar iphone 4 ve 4s benzerleri arasında bulunabilir. –

+0

Nesne belleği ayırmayı/ayrılmayı denetlemeyi denediniz mi? Sorun olabilir. Ayrıca bu bağlantıyı da kontrol edin: http://iphonedevsdk.com/forum/iphone-sdk-development/103541-cmdevicemotion-flick-gesture.html – iCreative

+0

Blok tabanlı yöntemler kullanılırken aynı problem var mı? – Jonathan

cevap

5

Biraz dolaştıktan sonra, bunun seyrek bir donanım/ürün yazılımı hatası nedeniyle olduğunu keşfettik. En akıllıca şey, hem motionManager.deviceMotion'un Nil olduğunu hem de motionManager.deviceMotionActive öğesinin doğru olduğunu kontrol etmekti.

+1

Ne sürpriz ... Başka bir Apple hatası. Onu duyduğuma üzüldüm, bunun için çok zaman harcadın. – jww

+0

Bunu nasıl çözdünüz? Aynı sorunla karşı karşıyayım ve ne yapacağımı bilmiyorum. Onu tespit edip bir uyarı gösteriyorum. Bazen yerleşik pusula uygulaması ile sensörleri kalibre yardımcı olur, ancak bazen ... – shelll

-1

Call güncellemelerini başlayacak ve periyodik olarak deviceMotion özelliğini okuyarak CMDeviceMotion nesnelere erişmek için

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:someFrame]; 

veya

[motionManager startDeviceMotionUpdates]; 

yöntemi çalıştırılıyor.