1

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

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

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

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

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

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

6 回答 6

3

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

所以像

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

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

于 2008-12-13T21:50:20.107 回答
2

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

于 2008-12-13T21:02:16.490 回答
2

顺便说一句:您可能想看看 Objective-C 2.0 的快速枚举

于 2008-12-13T21:40:34.290 回答
2

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

NSTimeInterval time = 10;

for (id elementId in gameSequenceArray) {

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

然后你声明showButton:

- (void)showButton:(id)anElement {
    ...
}
于 2008-12-15T11:18:32.267 回答
1

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

于 2008-12-13T21:58:08.670 回答
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];
}

再次感谢大家为我指明正确的方向。

于 2008-12-14T22:20:17.020 回答