【发布时间】:2011-02-03 08:34:37
【问题描述】:
我想为餐厅开发一个系统,它想按顺序计算剩余时间(比如比萨饼的顺序还剩 5 分钟),
我想知道这个计数器的基本代码是什么,比如如何使用 NSDate 或任何其他类???
请指导
【问题讨论】:
标签: iphone objective-c nsdate
我想为餐厅开发一个系统,它想按顺序计算剩余时间(比如比萨饼的顺序还剩 5 分钟),
我想知道这个计数器的基本代码是什么,比如如何使用 NSDate 或任何其他类???
请指导
【问题讨论】:
标签: iphone objective-c nsdate
获取自某个 NSDate 以来的秒数:
[[NSDate date] timeIntervalSinceDate:startingDate];
[NSDate date] 返回当前的 NSDate 对象,等于当前的日期和时间。
【讨论】:
我认为您可以实现一个循环计时器,每 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 秒限制内运行 countdownCheck 内的代码,这当然绰绰有余。理想情况下,您可以将其设置为仅 1 秒,前提是您的循环足够快。
【讨论】: