定时循环结果

时间:2008-12-13 20:59:08

标签: ios objective-c iphone cocoa-touch

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

一切正常但是我希望在每次调用之间调用10秒的方法调用方法。现在它一次播放(或以非常快的顺序播放)。我应该怎样看待在方法调用之间产生延迟?

以下是我到目前为止所得到的内容。谢谢!

NSEnumerator * enumerator = [gameSequenceArray objectEnumerator];
id element;

while(element = [enumerator nextObject])
{
    NSLog(element);

    int elementInt = [element intValue];
    [self.view showButton:elementInt];
}

6 个答案:

答案 0 :(得分:3)

你几乎肯定不想在你的循环中坚持“延迟”,这将阻止线程直到它结束(并且,除非你的应用程序是多线程的,否则阻止整个事情)。你可以使用多个线程,但我可能会将循环分解为另一个选择器的重复定时调用。存储枚举器(或当前索引),然后查看NSObject的performSelector:awithObject:afterDelay:

类似

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

顺便说一下:你可能想看看Objective-C 2.0的Fast Enumeration

答案 3 :(得分:2)

如果gameSequenceArray是一个数组,那么你不需要使用枚举器:

NSTimeInterval time = 10;

for (id elementId in gameSequenceArray) {

    [self.view performSelector:@selector(showButton:) withObject:elementID afterDelay:time];
}

然后你声明showButton:

- (void)showButton:(id)anElement {
    ...
}

答案 4 :(得分:1)

如果您最终使用计时器传递对象枚举器,请知道在完成枚举之前不允许修改数组的内容。

答案 5 :(得分:0)

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

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];
}

再次感谢你指点我正确的方向。