首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMAltimeter回调永不触发

CMAltimeter回调永不触发
EN

Stack Overflow用户
提问于 2014-09-24 23:34:20
回答 2查看 1.8K关注 0票数 3

使用我的6+,我一直试图用CoreMotion的新CMAltimeter来读取相对高度和压力。然而,回调从不开火。我有一个非常类似的设置,它使用加速度计,陀螺仪和磁强计。他们看起来都很好。

想知道外面有没有人能读到?

代码语言:javascript
复制
- (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");
    }
}

我试过快速地散步,但是这里只有一个海拔高度会丢失/增加的故事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-30 21:16:05

我对自己的问题有这么大的疏忽,我感到很尴尬。

在最初的文章中,我在CMAltimiter的作用域中声明了viewDidLoad,因此它超出了范围并被取消分配。我把它移动为一个iVar,现在就会触发回调。

代码语言:javascript
复制
#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");
    }
}
票数 10
EN

Stack Overflow用户

发布于 2014-09-28 21:11:05

您需要调用[altimeterManager stopRelativeAltitudeUpdates];,以便将引用释放到调度队列。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26028186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档