Как я могу сделать счетчик с помощью NSDate? - PullRequest
3 голосов
/ 03 февраля 2011

Я хочу разработать систему для ресторана, которая хочет рассчитывать оставшееся до заказа время (например, 5 минут, оставшихся в порядке пиццы),

Я хочу знать, какой базовый код будет для этого счетчика, например, как я могу использовать NSDate или любой другой класс ???

Пожалуйста, руководство

Ответы [ 2 ]

3 голосов
/ 03 февраля 2011

Получить количество секунд с определенной NSDate:

[[NSDate date] timeIntervalSinceDate:startingDate];

[NSDate date] возвращает текущий объект NSDate, и это равно текущей дате и времени.

1 голос
/ 03 февраля 2011

Я думаю, что вы можете реализовать повторяющийся таймер, который запускается каждые 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 секунду, при условии, что ваш цикл достаточно быстрый.

...