3

6+ を使用して、CoreMotion の新しい 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");
    }
}

これをちょっと散歩してみましたが、この辺りで増減する高度は 1 階しかありません。

4

2 に答える 2

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");
    }
}
于 2014-09-30T21:16:05.707 に答える
-3

[altimeterManager stopRelativeAltitudeUpdates];参照をディスパッチ キューに解放するように呼び出す必要があります。

于 2014-09-28T21:11:05.720 に答える