2014-09-24 74 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];,以便将参考发布到调度队列。