Я думаю, что вы можете реализовать повторяющийся таймер, который запускается каждые 30 секунд (не делайте это слишком быстро), который будет опрашивать все ожидающие запросы и обновлять обратный отсчет для каждого ордера и будет сигнализировать вам обо всех ордерах, достигших обратного отсчета.
Например: допустим, вы берете заказ за 5 минут.Затем вы рассчитаете дату, когда заказ будет готов, добавив 5 * 60 секунд к текущей дате:
NSDate *orderReadyAt = [NSDate dateWithTimeIntervalSinceNow:5*60];
Затем вы сохраните эту дату в свойстве даты окончания заказа.Например:
Order *myOrder = [[Order alloc] init];
... make your order here ...
myOrder.readyDate = orderReadyAt;
При запуске приложения вы определите повторяющийся таймер, который будет срабатывать каждые 30 секунд и будет вызывать функцию «countdownCheck»:
[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(countdownCheck) userInfo:nil repeats:YES];
На данный момент, что у вас естьсделать в вашем countdownCheck - циклически просмотреть экземпляры Order и для каждого из них рассчитать оставшееся время:
-(void)countdownCheck {
for(Order *aOrder in allOrders) {
NSTimeInterval secondsRemaining = [aOrder.readyDate timeIntervalSinceNow];
//... do something: update your GUI, show an alert if secondsRemaining<0...
}
}
Очевидно, что этот подход не критичен ко времени, единственное требование, которое у вас есть, - запустить код внутриобратный отсчет проверяет ограничение в 30 секунд, что, конечно, более чем достаточно.В идеале вы можете установить его только на 1 секунду, при условии, что ваш цикл достаточно быстрый.