2011-02-03 9 views

答えて

3

を案内してください特定のNSDateからの秒の量を得る:

[[NSDate date] timeIntervalSinceDate:startingDate]; 

[NSDate日付]現在のNSDateオブジェクトを返し、現在の日付と時間に等しい厥。

+0

どのようにNSDateに秒を渡すことができますか? –

+0

@Veer NSDateはDATE秒で動作しません。開始時刻をNSDateオブジェクトに格納する場合は、dateObject = [[NSDate date] retain]を呼び出してこのメ​​ソッドを呼び出して残り時間を計算します。*すべて設定する必要があります。 –

1

私はあなたが保留中のリクエストをすべてポーリングし、各注文のカウントダウンを更新し、カウントダウンに達したすべての注文を通知する、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];

を、明らかに、このアプローチは時間が重要ではない


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

のみを必要とする:countdownCheckご注文のインスタンスを通じて、それらのそれぞれは、残り時間を計算するためのループにありますあなたが持っているのは、30秒の制限でcountdownCheckの中でコードを実行することです。これはもちろん十分です。あなたのループが十分速ければ理想的には1秒に設定することができます。

+0

@Sir viggio24、あなたのループをもっと説明できますか? ?ここのallOrderのデータ型はループですか?私は単純にNSLog "Hello"を印刷して、それを置いている時間間隔で印刷しています。 –

+0

さて、新しい注文を作成するたびにどこかに保存します。私の例では、これはNSMutableArray "allOrders"です。したがって、起動時にallOrders配列を初期化します:NSMutableArray * allOrders = [[NSMutableArray alloc] init]; ...後で新しいOrderインスタンス(myNewOrder)を作成すると、それを配列に追加します:[allOrders addObject:myNewOrder];新しい注文を挿入するたびにカウントダウンがループ内で計算されます。もちろん、配列から配列を削除する必要があります。 – viggio24

関連する問題