2014-09-24 46 views
3

使用我的6+我一直在嘗試使用CoreMotion的新CMAltimeter讀取相對高度和壓力。然而,回調從未解僱。我有一個非常類似的設置,而不是使用加速度計,陀螺儀和磁力計。他們似乎都很好。CMAltimeter回調從未觸發

想知道有沒有人能夠讀書?

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if([CMAltimeter isRelativeAltitudeAvailable]){ 
     CMAltimeter *altimeterManager = [[CMAltimeter alloc]init]; 
     [altimeterManager startRelativeAltitudeUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAltitudeData *altitudeData, NSError *error) { 
      // This never fires. 
      NSString *data = [NSString stringWithFormat:@"Altitude: %f %f", altitudeData.relativeAltitude.floatValue, altitudeData.pressure.floatValue]; 
      NSLog(@"%@", data); 
      self.altimeterLabel.text = data; 
     }]; 
     NSLog(@"Started altimeter"); 
     self.altimeterLabel.text = @"-\n-"; 
    } else { 
     NSLog(@"Altimeter not available"); 
    } 
} 

我試着把這個快速散步,但只有一個海拔高度在這裏失去/獲得的故事。

+0

沒有硬件可以自己嘗試這個,但有幾點想法:1)嘗試發送更新到後臺隊列而不是主隊列? 2)獲得更多的高度 - 嘗試模型火箭? :) – rickster 2014-09-25 04:11:39

+0

是的,我已經嘗試使用背景隊列以及相同的結果。文檔說它應該每隔幾分鐘更新一次,但我從未見過它更新。仍然沒有走上一座小山...... – VaporwareWolf 2014-09-27 06:09:30

回答

10

我很尷尬地回答我自己的問題,這樣一個巨大的疏忽。

在原始文章中,我有CMAltimiter在viewDidLoad的範圍內聲明,因此它超出了範圍並被釋放。我把它移動到了一個iVar上,現在這個回調觸發了。

#import "ViewController.h" 
@import CoreMotion; 

@interface ViewController() 
@property (nonatomic, strong) CMAltimeter *altimeterManager; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if([CMAltimeter isRelativeAltitudeAvailable]){ 
     self.altimeterManager = [[CMAltimeter alloc]init]; 
     [self.altimeterManager startRelativeAltitudeUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAltitudeData *altitudeData, NSError *error) { 
      // This now fires properly 
      NSString *data = [NSString stringWithFormat:@"Altitude: %f %f", altitudeData.relativeAltitude.floatValue, altitudeData.pressure.floatValue]; 
      NSLog(@"%@", data); 
      self.altimeterLabel.text = data; 
     }]; 
     NSLog(@"Started altimeter"); 
     self.altimeterLabel.text = @"-\n-"; 
    } else { 
     NSLog(@"Altimeter not available"); 
    } 
} 
+0

當我使用CoreLocation的CLLocationManager類時,我有這種類似的情況,並將它作爲一個伊娃解決問題。我認爲是複習ARC課的時候了.-:] – tounaobun 2015-03-22 01:48:56

-3

您需要致電[altimeterManager stopRelativeAltitudeUpdates];,以便將參考發佈到調度隊列。