我有点陷入困境,我希望有人可以指出我正确的方向。我有一个存储序列的NSMutableArray。我创建了一个枚举器,以便while循环可以逐个获取数组的内容。
一切正常但是我希望在每次调用之间调用10秒的方法调用方法。现在它一次播放(或以非常快的顺序播放)。我应该怎样看待在方法调用之间产生延迟?
以下是我到目前为止所得到的内容。谢谢!
NSEnumerator * enumerator = [gameSequenceArray objectEnumerator];
id element;
while(element = [enumerator nextObject])
{
NSLog(element);
int elementInt = [element intValue];
[self.view showButton:elementInt];
}
答案 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];
}
再次感谢你指点我正确的方向。