【问题标题】:how can I make a counter using NSDate?如何使用 NSDate 制作计数器?
【发布时间】:2011-02-03 08:34:37
【问题描述】:

我想为餐厅开发一个系统,它想按顺序计算剩余时间(比如比萨饼的顺序还剩 5 分钟),

我想知道这个计数器的基本代码是什么,比如如何使用 NSDate 或任何其他类???

请指导

【问题讨论】:

    标签: iphone objective-c nsdate


    【解决方案1】:

    获取自某个 NSDate 以来的秒数:

    [[NSDate date] timeIntervalSinceDate:startingDate];
    

    [NSDate date] 返回当前的 NSDate 对象,等于当前的日期和时间。

    【讨论】:

    • 如何将秒数传递给 NSDate?
    • @Veer NSDate 不适用于秒,它是一个日期。如果您将开始时间存储在 NSDate 对象中,通过调用 dateObject = [[NSDate date] retain] 然后调用此方法来计算剩余时间,您应该全部设置
    【解决方案2】:

    我认为您可以实现一个循环计时器,每 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 秒,前提是您的循环足够快。

    【讨论】:

    • @Sir viggio24,你能解释一下你的循环吗?什么是 allOrders 的数据类型是你的循环?我只是通过打印 NSLog"Hello" 来完成的,它是在我放置它的时间间隔内打印的。
    • 好吧,每次你创建一个新订单时,你都会存储在某个地方,在我的示例中,这是一个 NSMutableArray "allOrders"。所以在启动时你初始化 allOrders 数组: NSMutableArray *allOrders = [[NSMutableArray alloc] init]; ...稍后当您创建一个新的 Order 实例 (myNewOrder) 时,您会将其添加到您的数组中:[allOrders addObject:myNewOrder];因此,每次您插入新订单时,都会在循环中计算倒计时。当然,您需要在订单送达后从数组中删除订单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多