ios - 需要通过嵌套异步调用获得 "For Loop"的结果( Objective-C )

标签 ios objective-c for-loop objective-c-blocks completionhandler

一旦循环完成,我需要获得最终的 activeTime 值。

下面的代码运行一个循环,循环多次调用一个 block (运行一个异步进程)。如果在此期间发生超过 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);
                                    }];
    }

最佳答案

你可以使用回调

- (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);
}

关于ios - 需要通过嵌套异步调用获得 "For Loop"的结果( Objective-C ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053421/

相关文章:

objective-c - sender.selected = !sender.isSelected 到底做了什么导致我的按钮切换?

ios - 拉动刷新表时崩溃

python - 如何从整数列表中生成一个整数?

c++ - 减少大数据的条件语句

ios - 在应用程序启动/恢复时检测在线状态 - 网络可能会延迟启动?

objective-c - iOS使我的应用程序不断在后台运行

iphone - 加载 ABPersonViewController 后如何以编程方式调用 ABPersonViewController 编辑 View

r - 如何增强 for 循环

ios - 身份证书-IOS MDM

ios - 在 iOS 中使用 ARC 对 dealloc 进行单元测试