gpt4 book ai didi

ios - 将 block 中的数据保存到 NSMutableDictionary 和一般的 block 中

转载 作者:行者123 更新时间:2023-11-29 12:27:56 24 4
gpt4 key购买 nike

我在思考使用 block 的最佳方式时遇到了很多麻烦。我正在尝试检索计步器数据,访问数据的方法是 block ...

[self.pedometer queryPedometerDataFromDate:yesterday
toDate:midnightOfToday
withHandler:^(CMPedometerData *pedometerData, NSError *error) {

dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
NSLog(@"Pedometer is NOT available.");
}
else {
NSLog(@"Steps %@", pedometerData.numberOfSteps);
yesterdaysNumbersLabel.text = [pedometerData.numberOfSteps stringValue];
[pedometerDictionary setValue:[pedometerData.numberOfSteps stringValue] forKey:@"2"];
}
});
}];

使用上面的代码我可以获取数据、记录数据并更新屏幕上的标签,但是我不知道如何将数据设置到数组或字典中以便我可以做其他事情与它。

我明白为什么数组和字典总是空的...... block 在不同的线程上运行,我在 block 完成之前访问它们。

谁能帮我想清楚如何对数据做更多的事情。

更新 1:

现在我在 .h 中有这个

@property (strong, atomic) NSMutableDictionary *pedometerDictionary;

我在 .m 中合成它,我称之为...

[self getNumbersForYesterday];
NSLog(@"Dictionary: %@", pedometerDictionary);

...运行上述函数并立即尝试记录结果。就像我说的,我理解它不起作用的所有原因。我只需要弄清楚如何改变我正在做的事情,让它发挥作用。

更新 2:

这是在 .h 中

@property (strong, atomic) NSMutableDictionary *pedometerDictionary;

这是.m

@synthesize pedometerDictionary;

- (id)init {
self = [super init];
if (self != nil) {
self.pedometerDictionary = [[NSMutableDictionary alloc] init];
}
return self;
}

我就是这样使用它的。

[self getNumbersForYesterday];
NSLog(@"Dictionary: %@", self.pedometerDictionary);

调用它。

- (void)getNumbersForYesterday {

[self.pedometer queryPedometerDataFromDate:yesterday
toDate:midnightOfToday
withHandler:^(CMPedometerData *pedometerData, NSError *error) {

dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
NSLog(@"Pedometer is NOT available.");
}
else {
NSLog(@"Steps %@", pedometerData.numberOfSteps);
yesterdaysNumbersLabel.text = [pedometerData.numberOfSteps stringValue];
[self.pedometerDictionary setValue:[pedometerData.numberOfSteps stringValue] forKey:@"2"];

}

});
}];

}

如果我只想将所有工作保留在 block 中,我会很好。我已经了解到,由于 block 是异步的,我正在尝试 NSLog 我的字典,并且该 block 尚未完成运行。所以,我的字典仍然是 NULL。

最佳答案

Dollars to donuts,您的 pedometerDictionary 一开始就没有创建(或者是,但声明没有用处)。

即你的代码行 pedometerDictionary = [[NSMutableDictionary alloc] init]; 在哪里? pedometerDictionary 声明在哪里?您是如何尝试从中获取 NSLog() 值的?

此外,使用 setObject:forKey:


奇怪的是它被命名为pedometerDictionary。这证明它要么被声明为全局变量(不应该是),要么是包含上述代码的任何方法的局部变量(这将不起作用),要么您直接声明和使用实例变量。

关于ios - 将 block 中的数据保存到 NSMutableDictionary 和一般的 block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28533192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com