处理程序块和NSArrays - 如何添加到块中的数组?

时间:2013-10-05 15:58:07

标签: cocoa nsmutablearray objective-c-blocks

我想将NSObject添加到块内的NSMutableArray中。在下面的代码中,NSLog行正常工作并返回我期望的数字。但是,当我尝试将该结果添加到NSArray时,当我稍后访问它时,该数组总是为空。

CMStepQueryHandler  stepQueryHandler = ^(NSInteger numberOfSteps,
NSError *error) {
    NSLog(@"CMStepQueryHandler: Steps on day: %i", (int)numberOfSteps);        
    [stepsPerDay addObject:[NSNumber numberWithInt:numberOfSteps]];
};

如何从块内部向NSMutableArray(在本例中为stepsPerDay)中添加一个对象,以便以后可以访问它?

2 个答案:

答案 0 :(得分:1)

代码看起来很好。 我怀疑你忘了初始化stepsPerDay。它应该是

NSMutableArray *stepsPerDay = [NSMutableArray array];

作为一个不相关的建议,您也可以考虑更现代的语法

[stepsPerDay addObject:@(numberOfSteps)];

答案 1 :(得分:0)

问题是,在我尝试使用数组的内容后,块总是会执行addObject,我想这是因为块是异步执行的。解决方案是让块调用一个与数组一起工作的函数,这样我就能保证在执行函数时对象会被添加到数组中。