代码之家  ›  专栏  ›  技术社区  ›  acreek

定时环路结果

  •  1
  • acreek  · 技术社区  · 17 年前

    我有点卡住了,我希望有人能给我指出正确的方向。我有一个存储序列的NSMutableArray。我创建了一个枚举器,以便while循环可以逐个获取数组的内容。

    一切正常,但我希望调用方法时,每次调用之间有10秒的间隔。现在它一次播放(或以非常快的顺序播放)。我应该看什么来在方法调用之间创建延迟?

    NSEnumerator * enumerator = [gameSequenceArray objectEnumerator];
    id element;
    
    while(element = [enumerator nextObject])
    {
        NSLog(element);
    
        int elementInt = [element intValue];
        [self.view showButton:elementInt];
    }
    
    6 回复  |  直到 10 年前
        1
  •  3
  •   Adam Wright    17 年前

    大概是

    [NSObject performSelector:@selector(some:selector:name:) withObject:objInstance afterDelay: 10]
    

    选择器将拾取当前枚举数的位置,使用它,使其前进并安排另一个调用。确保在执行这组定时方法时不允许更改集合。

        2
  •  2
  •   Chris Hanson    17 年前

    这就是NSTimer的作用。使用NSTimer按顺序获取数组中的每个元素。

        3
  •  2
  •   Abizern    17 年前

    作为旁白:您可能想看看Objective-C2.0 Fast Enumeration

        4
  •  2
  •   Abizern    17 年前

    NSTimeInterval time = 10;
    
    for (id elementId in gameSequenceArray) {
    
        [self.view performSelector:@selector(showButton:) withObject:elementID afterDelay:time];
    }
    

    然后声明showButton:

    - (void)showButton:(id)anElement {
        ...
    }
    
        5
  •  1
  •   Ashley Clark    17 年前

        6
  •  0
  •   acreek    17 年前

    这是我根据每个人的输入提出的解决方案。

    NSEnumerator * enumerator = [gameSequenceArray objectEnumerator];
    
    NSTimeInterval time = 5;
    
    for (NSString *element in enumerator) {
        id elementId = element;
    
        time++;
    
        [self.view performSelector:@selector(showButton:) withObject:elementId afterDelay:time];
    }