2011-02-03 4 views
2

Je veux développer un système pour le restaurant, qui veulent calculer le temps restant dans l'ordre (comme 5 minutes restantes dans l'ordre de pizza),Comment puis-je créer un compteur en utilisant NSDate?

Je veux savoir quel code de base soit pour ce compteur, comme comment puis-je utiliser NSDate ou tout autre classe ???

S'il vous plaît guider

Répondre

3

Get quantité de secondes depuis un certain NSDate:

[[NSDate date] timeIntervalSinceDate:startingDate]; 

[date NSDate] renvoie l'objet NSDate courant, et c'est égale à la date et l'heure.

+0

comment puis-je passer des secondes à NSDate? –

+0

@Veer NSDate ne fonctionne pas avec les secondes, c'est une date. Si vous stockez l'heure de début dans un objet NSDate, en appelant dateObject = [[NSDate date] retain], puis appelez cette méthode pour calculer le temps restant que * devrait * être réglé –

1

Je pense que vous pouvez implémenter un temporisateur récurrent, rythmé toutes les 30 secondes (ne le faites pas trop vite), qui interrogera toutes les demandes en attente et mettra à jour le compte à rebours pour chaque commande et vous signalera tous les ordres ayant atteint le compte à rebours .

E.g .: disons que vous prenez une commande de 5 minutes. Ensuite, vous calculerez la date de la commande sera prête en ajoutant 5 * 60 secondes pour la date:

NSDate *orderReadyAt = [NSDate dateWithTimeIntervalSinceNow:5*60];

Ensuite, vous stockerez cette date à votre propriété date de fin de commande. Par exemple:


Order *myOrder = [[Order alloc] init]; 
... make your order here ... 
myOrder.readyDate = orderReadyAt; 

Au démarrage de l'application vous permettra de définir une minuterie récurrente qui déclenchera toutes les 30 secondes et appelle la fonction « countdownCheck »:

[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(countdownCheck) userInfo:nil repeats:YES];

À ce stade, ce que vous avez à faire dans votre countdownCheck est en boucle par vos instances de commande et pour chacun d'eux calculer le temps restant:


-(void)countdownCheck { 
for(Order *aOrder in allOrders) { 
    NSTimeInterval secondsRemaining = [aOrder.readyDate timeIntervalSinceNow]; 
    //... do something: update your GUI, show an alert if secondsRemaining<0... 
} 
} 

Il est clair que cette approche est pas le temps critique, le seul besoin Ce que vous avez est d'exécuter le code dans countdownCheck dans la limite de 30 secondes, ce qui est bien sûr plus que suffisant. Vous pouvez idéalement le régler à 1 seconde seulement, à condition que votre boucle soit assez rapide.

+0

@Sir viggio24, Pouvez-vous expliquer votre boucle plus ? et quel est le type de données de toutes les commandes ici est votre boucle? J'ai fait simplement en imprimant NSLog "Bonjour", et il imprime dans l'intervalle de temps où je le mets. –

+0

Eh bien, chaque fois que vous créez une nouvelle commande, vous allez stocker quelque part, dans mon exemple c'est un NSMutableArray "allOrders". Donc, au démarrage, vous initiez le tableau allOrders: NSMutableArray * allOrders = [[NSMutableArray alloc] init]; ... plus tard, lorsque vous créerez une nouvelle instance Order (myNewOrder), vous l'ajouterez à votre tableau: [allOrders addObject: myNewOrder]; donc chaque fois que vous insérez une nouvelle commande, son compte à rebours sera calculé dans la boucle. Bien sûr, vous devrez supprimer un ordre d'un tableau lorsqu'il a été servi. – viggio24

Questions connexes