2008-12-13 170 views
1

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

一切工作正常,但我希望调用的方法之间的每次通话间隔10秒。现在它可以一次播放(或以非常快的顺序播放)。我应该看看如何在方法调用之间创建延迟?

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

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

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

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

嘿感谢一大堆你的投入大家。我会想出一个解决方案,我会在完成后发布。再次感谢我欣赏它。 – acreek 2008-12-13 22:02:21

回答

3

你几乎肯定不希望在循环,坚持一个“延迟”,这将阻止线程,直到它已经结束了(除非你的应用程序是多线程的,否则会阻止整个事物)。你可以使用多个线程,但是我可能会将循环拆分为其他选择器的重复定时调用。存储枚举(或电流指数),然后看的NSObject的performSelector:awithObject:afterDelay:

因此,像

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

其中,选择将皮卡当前枚举,使用它,推动它和时间表另一个电话。确保在这组定时方法正在执行时不允许更改集合。

2

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

2

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

+0

除了这是他想要的相反。他想慢慢地列举*。 – 2008-12-14 14:38:35

+1

难道你不知道这是一种既定的军事传统 - 赶快等待。 – Abizern 2008-12-14 17:32:32

1

如果最终将计数器传递给对象枚举器,请确保在枚举完成后才允许修改数组的内容。

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

再次感谢您指点我在正确的方向大家。

2

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

NSTimeInterval time = 10; 

for (id elementId in gameSequenceArray) { 

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

,然后声明showButton:

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