Objective c 将iPhone 6高度表读数写入队列块内的数组类属性?

Objective c 将iPhone 6高度表读数写入队列块内的数组类属性?,objective-c,objective-c-blocks,cmaltimeter,Objective C,Objective C Blocks,Cmaltimeter,这里是新的iOS开发者。我一直在街区和高度计的文档中寻找答案,但我没有找到答案。我想我遗漏了一些简单的东西,但我想不出来 我有一个名为PressureSensor的自定义类。简单地说,该类有一个属性: @property (nonatomic, strong, readwrite) NSMutableArray *pressure; 我将高度表中的NSNumber值加载到此数组中 类的初始值设定项为: - (instancetype)init { self = [super init]

这里是新的iOS开发者。我一直在街区和高度计的文档中寻找答案,但我没有找到答案。我想我遗漏了一些简单的东西,但我想不出来

我有一个名为PressureSensor的自定义类。简单地说,该类有一个属性:

@property (nonatomic, strong, readwrite) NSMutableArray *pressure;
我将高度表中的NSNumber值加载到此数组中

类的初始值设定项为:

- (instancetype)init
{
    self = [super init];

    if (self)
    {
        if (self.altimeterIsAvailable)
        {
            NSOperationQueue *queue = [[NSOperationQueue alloc] init];
            [self.altimeter startRelativeAltitudeUpdatesToQueue:queue withHandler:^(CMAltitudeData *altitudeData, NSError *error) {
                dispatch_async(dispatch_get_main_queue(), ^ {

                    [self.pressure addObject:altitudeData.pressure];

                    NSLog(@"Pressure 1: %@", [self.pressure lastObject]);
                });
            }];
            NSLog(@"Pressure 2: %@", [self.pressure lastObject]);
        }
    }
    return self;
}
当我在手机上运行应用程序时,我假设压力已成功添加到self.pressure数组,因为压力是通过压力1行打印到控制台的,该行访问self.pressure的最后一个对象。但是,这些更改似乎不适用于此块之外,因为Pressure 2 line将null输出到控制台,并且我似乎无法对此块之外的self.Pressure执行任何操作

我是不是遗漏了积木到底是如何工作的?我需要一个街区吗?我在这里完全不知所措

附录:self.altimeterrisavailable在别处定义。这部分代码不应该有任何问题


编辑:错误最终出现在其他地方。对于浏览本文的未来读者,上述代码应该是一种非常有效的方法,可以添加到块中的属性数组。

这不是答案,但我想提一下

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[self.altimeter startRelativeAltitudeUpdatesToQueue:queue withHandler:^(CMAltitudeData *altitudeData, NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^ {
        ...
    });
 }];
创建队列,并将\u async分派到主队列。这是多余的。您可以直接对其使用NSOperationQueue+mainQueue方法

NSOperationQueue *queue = [NSOperationQueue mainQueue];
[self.altimeter startRelativeAltitudeUpdatesToQueue:queue withHandler:^(CMAltitudeData *altitudeData, NSError *error) {
    ...
}];

startRelativeAltitudeUpdatesToQueue:withHandler:是一个异步方法,与所有异步方法一样,它会在回调其处理程序之前立即返回,因此在更新读数之前会打印方法@Pressure 2外部的日志。我想这可能与方法的异步性有关,但我认为这不是全部。无论我运行它多长时间,即使控制台中有数百个成功的Pressure 1调用,Pressure 2也总是输出null。此外,如果我在块外打印[self.pressure count],它也会返回0。您是如何实例化可变数组的?当你让它运行很长一段时间后,Pressure 2日志是否打印了不止一次?刚刚发现我的问题,它实际上在视图控制器中。我是失踪的如果_视图控制器中的传感器的吸气剂中的pressureSensor,因此每次都会重新定位。我认为压力现在正在写入压力数组。谢谢你的帮助!