2008-12-13 2 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 { 
    ... 
} 
Смежные вопросы