Результаты цикла синхронизации

Я немного застрял, и я надеюсь, что кто-то может направить меня в правильном направлении. У меня есть NSMutableArray, который хранит последовательность. Я создал перечислитель, чтобы цикл while мог получать содержимое массива один за другим.

Все работает нормально, однако я хочу, чтобы методы вызывались с 10-секундным интервалом между вызовами. Прямо сейчас он играет все сразу (или в очень быстром порядке). Что я должен посмотреть, чтобы создать задержку между вызовами методов?

Ниже то, что я получил до сих пор. Спасибо!

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

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

    int elementInt = [element intValue];
    [self.view showButton:elementInt];
}
13.12.2008 20:59:08
Привет всем большое спасибо за ваш вклад. Я найду решение и опубликую его, когда закончу. Еще раз спасибо, я ценю это.
acreek 13.12.2008 22:02:21
6 ОТВЕТОВ
РЕШЕНИЕ

Вы почти наверняка не захотите вставлять «задержку» в ваш цикл, который будет блокировать поток до тех пор, пока он не закончится (и, если ваше приложение не является многопоточным, блокирует все это). Вы можете использовать несколько потоков, но вместо этого я, вероятно, разделю цикл на повторяющиеся синхронизированные вызовы другого селектора. Сохраните перечислитель (или текущий индекс), а затем посмотрите на executeSelector объекта NSObject: awithObject: afterDelay:

Так что-то вроде

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

где селектор подберет текущий перечислитель, использует его, переместит его и запланирует другой вызов. Убедитесь, что вы не разрешаете вносить изменения в коллекцию во время выполнения этого набора временных методов.

3
13.12.2008 21:50:20

Вот для чего NSTimer. Используйте NSTimer для последовательного получения каждого элемента в массиве.

2
13.12.2008 21:02:16

В качестве отступления: вы можете взглянуть на быстрое перечисление Objective-C 2.0

2
13.12.2008 21:40:34
За исключением того, что это своего рода противоположность того, что он хочет. Он хочет очень медленно перечислять .
Lily Ballard 14.12.2008 14:38:35
Разве ты не знаешь, что это устоявшаяся военная традиция - поторопись и подожди.
Abizern 14.12.2008 17:32:32

Если в итоге вы передадите свой перечислитель объектов с таймером, знайте, что вам не разрешено изменять содержимое вашего массива, пока вы не закончите перечислять его.

1
13.12.2008 21:58:08

Так что здесь было решение, которое я придумал, основываясь на каждом входе.

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

Еще раз спасибо за указание мне в правильном направлении всем.

0
14.12.2008 22:20:17
время ++ означает, что селектор сработает через 6, 7, 8, ... секунд
Abizern 15.12.2008 11:21:06
Да, я хотел небольшую задержку между каждым вызовом метода.
acreek 17.12.2008 18:08:23

если gameSequenceArray - массив, вам не нужно использовать перечислитель:

NSTimeInterval time = 10;

for (id elementId in gameSequenceArray) {

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

и тогда вы объявляете showButton:

- (void)showButton:(id)anElement {
    ...
}
2
15.12.2008 11:18:32