新的 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 数组中,因为压力是通过访问 self.pressure 的 lastObject 的“压力 1”行打印到控制台的。但是,这些更改似乎不适用于此块之外,因为 Pressure 2 行输出(null)到控制台,并且似乎我无法在此块之外使用 self.pressure 做任何事情。
我是否错过了有关块如何工作的信息?我只需要一个 __block 某处吗?我在这里完全不知所措。
附录:self.altmeterIsAvailable 在别处定义。那部分代码应该没有任何问题。
编辑:错误最终出现在其他地方。对于浏览这篇文章的未来读者,上面的代码应该是添加到块中的属性数组的一种完全有效的方法。