2017-01-17 8 views
0

私はカウントダウンタイマーを持っています。アプリケーションを終了して再起動すると、割り当てられた時間に応じてタイマーが再開します。出来ますか?アプリケーションを終了してもう一度起動するタイマーは割り当てられた時間に応じて時間を再開します

timer = [NSTimer scheduledTimerWithTimeInterval:1 
       target:self 
       selector:@selector(timerFired) 
       userInfo:nil repeats:YES]; 

- (void)timerFired 
{ 
    if((currMinute>0 || currSeconds>=0) && currMinute>=0) 
    { 
     if(currSeconds==0) 
     { 
      currMinute-=1; 
      currSeconds=59; 
     } 
     else if(currSeconds>0) 
     { 
      currSeconds-=1; 
     } 
     if(currMinute>-1) 


     timeRemain=[NSString stringWithFormat:@"%d%@%02d",currMinute,@":",currSeconds]; 

    } 
    else 
    { 
     [timer invalidate]; 
    } 
} 
+1

アプリを終了するときに 'UserDefaults'の残り時間を保存してから、アプリのバックアップを開始するときにその値を読み込みます。その後、あなたが残した時間を続けることができます。あなたがそれを継続してカウントしているかのように動作させたいなら、おそらくあなたはアプリケーションを 'UserDefaults'に退出させ、そして現在の時間に基づいていくつかの計算をする時間を節約したいでしょう。 – Hodson

答えて

0

-(void)timerFired 
{ 
    NSInteger currMin = [[NSUserDefaults standardUserDefaults] integerForKey:@"currentMinute"]; 
    NSInteger currSec = [[NSUserDefaults standardUserDefaults] integerForKey:@"currentSeconds"]; 

    if((currMin>0 || currSec>=0) && currMin>=0) 
    { 
     if(currSec==0) 
     { 
      currMin-=1; 
      currSec=59; 
     } 
     else if(currSec>0) 
     { 
      currSec-=1; 
     } 
     if(currMin>-1) 


      timeRemain=[NSString stringWithFormat:@"%d%@%02d",currMin,@":",currSec]; 
      [[NSUserDefaults standardUserDefaults] setInteger:currMin forKey:@"currentMinute"]; 
      [[NSUserDefaults standardUserDefaults] setInteger:currSec forKey:@"currentSeconds"]; 


    } 
    else 
    { 
     [timer invalidate]; 
    } 
} 
+0

Yah Thats ok.but relaunch it againタイマーは割り当てられた時間に従って時間を再開すべきですか?再開の時間を確認する方法は? – Ramanan

+0

その後、終了(applicationWillTerminate)に日付と時刻を保存してから、起動(didFinishLaunchingWithOptions)をもう一度チェックしてください。そうすれば、再開時間を計算することができます。 – Ankur

0

お客様の要件に応じて、下記のように将来の日付を保存する必要があります。

タイマーを開始している間に現在の時間を追加して、あなたの時間をあなたが必要としていた時間の&秒に追加します。例については

currMinute = 2; 
currSeconds = 30; 

NSDate *dateFuture = [[NSDate date] dateByAddingTimeInterval:(currMinute*60)+currSeconds]; 

今、この

if (![[NSUserDefaults standardUserDefaults] objectForKey:@"EndDate"]) { 
    [[NSUserDefaults standardUserDefaults] setObject:dateFuture forKey:@"EndDate"]; 
} 

ようNSUserDefaultsには、この将来の日付を保存あなたのタイマーを起動し

timer = [NSTimer scheduledTimerWithTimeInterval:1 
              target:self 
              selector:@selector(timerFired) 
              userInfo:nil repeats:YES]; 

注:終了日がUserDefaultsに存在するかどうかを確認する前に、 と終了日が現在の日付よりも大きい。

- (void)timerFired 
{ 

    NSComparisonResult result = [[NSDate date] compare:[[NSUserDefaults standardUserDefaults] objectForKey:@"EndDate"]]; 
    if (result == NSOrderedDescending) { 
     [timer invalidate]; 
     [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"EndDate"]; 
    }else{ 
     NSTimeInterval secondsBetween = [[NSDate date] timeIntervalSinceDate:[[NSUserDefaults standardUserDefaults] objectForKey:@"EndDate"]]; 

     NSLog(@"There are %f secondsBetween in between the two dates.", secondsBetween); 
    } 
} 

今、あなたはあなただけの時間を更新されます時間のアプリのN番号を再起動した後、あなたの残り時間を得ることができます。

関連する問題