1

循环完成后,我需要获取最终的 activeTime 值。

下面的代码运行一个循环,该循环又多次调用一个块(它运行一个异步进程)。如果在此期间发生超过 10 个步骤,则每个循环将增加 activeTime。

最终我想调用这段代码并让它返回 activeTime 的最终值。

我正在考虑completionhandler但不确定。

有人可以建议我如何实现这一目标吗?

    __block NSInteger activeTime = 0;
    for (NSDate *date = [self startDateOfToday]; 
         [date compare:[NSDate date]] == NSOrderedAscending; 
         date = [date dateByAddingTimeInterval:10])        
    {
        NSDate *rangeStart = date;
        NSDate *rangeEnd = [date dateByAddingTimeInterval:10];

        [stepCounter queryStepCountStartingFrom:rangeStart
                                             to:rangeEnd
                                        toQueue:[NSOperationQueue mainQueue]
                                    withHandler:^(NSInteger numberOfSteps, NSError *error) {

                                        if (numberOfSteps > 10) {
                                            activeTime=activeTime+10;
                                        }

                                        NSLog(@"Steps = %ld; Time = %ld",(long)numberOfSteps, (long)activeTime);
                                    }];
    }
4

1 回答 1

1

你可以使用回调

- (void) myfunction {
    __block NSInteger activeTime = 0;
    for (NSDate *date = [self startDateOfToday]; 
         [date compare:[NSDate date]] == NSOrderedAscending; 
         date = [date dateByAddingTimeInterval:10])        
    {
        NSDate *rangeStart = date;
        NSDate *rangeEnd = [date dateByAddingTimeInterval:10];

        [stepCounter queryStepCountStartingFrom:rangeStart
                                             to:rangeEnd
                                        toQueue:[NSOperationQueue mainQueue]
                                    withHandler:^(NSInteger numberOfSteps, NSError *error) {

                                        if (numberOfSteps > 10) {
                                            activeTime=activeTime+10;
                                        }

                                        if(rangeEnd == numberOfSteps)
                                        {
                                            [self callback:activeTime];
                                        }

                                        NSLog(@"Steps = %ld; Time = %ld",(long)numberOfSteps, (long)activeTime);
                                    }];
    }
}

- (void)callback:(NSInteger)activeTime {

    NSLog(@"Active Time = %d", activeTime);
}
于 2014-02-27T13:33:05.383 回答