2011-06-23 39 views
0

我有伊娃類:爲什麼在我調用stopDeviceMotionUpdates和startDeviceMotionUpdates之後,我的保留CMAttitude實例變爲零?

@interface myCoolClass:NSObject 
{ 
    CMAttitude *referenceAttitude; 
} 

我在執行有這些選擇:

- (void) startTrackingMotion 
{ 
    if (motionManager == nil) { 
     motionManager = [[CMMotionManager alloc] init]; 
     motionManager.accelerometerUpdateInterval = 0.01; 
     motionManager.deviceMotionUpdateInterval = 0.01; 
     referenceAttitude = [motionManager.deviceMotion.attitude retain]; 
    } 

    [motionManager startDeviceMotionUpdates]; 

    if (referenceAttitude == nil) { 
     CMDeviceMotion *dm = motionManager.deviceMotion; 
     referenceAttitude = [dm.attitude retain]; 
    } 
} 

- (void) stopTrackingMotion 
{ 
    [motionManager stopDeviceMotionUpdates]; 
} 

我想,當我初始化運動經理採取referenceAttitude,並用它在生命應用程序。有時候,我需要跟蹤議案,其他時候我不需要。

這裏的應用流量:

  1. 呼叫startTrackingMotion因爲我已經準備好運動
  2. referenceAttitude撐保留,我用它來追蹤運動
  3. 我打電話stopTrackingMotion因爲我該怎麼辦非運動的東西
  4. 應用程序做一些其他的東西
  5. 我打電話startTrackingMotion再次因爲我已經準備好再次運動

此時,當我遍歷代碼時,我會遍歷「if(motionManager == nil)」循環,因爲它仍然存在。但是,每次涉及到「if(referenceAttitude == nil)」循環時,if語句都會解析爲true。

我是否保留不正確?是否調用stopDeviceMotionUpdates無我的實例嗎?

謝謝。

回答

0

調用stopDeviceMotionUpdates不會刪除您的referenceAttitude變量。你使用的是什麼版本的XCode,以及你在使用哪種設備?

您是否驗證過它在代碼中設置爲有效的CMAttitude實例?

referenceAttitude = [motionManager.deviceMotion.attitude retain]; 

如果您在referenceAttitude == nil塊內執行在調試器po [dm attitude],你得到了什麼?

1

我不認爲你給了motionManager足夠的時間來更新自己。

您應該在deviceMotionUpdateInterval(0.1)的第一個打勾後獲得referenceAttitude。

相關問題