2017-01-17 9 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

예. 그렇습니다. 다시 타이머를 다시 시작하면 타이머가 할당 된 시간에 따라 시간을 재개해야합니까? 다시 시작하는 시간을 확인하는 방법? – Ramanan

+0

그런 다음 Quit (applicationWillTerminate)에 날짜와 시간을 저장하고 시작 (didFinishLaunchingWithOptions)으로 다시 확인해야합니다. 그런 다음 다시 시작 시간을 계산할 수 있습니다. – Ankur

0

귀하의 요구 사항에 따라 아래에 언급 된 미래 날짜를 저장해야합니다.

타이머를 시작하는 동안 현재 시간을 추가하고 분당 & 초를 추가하십시오. 예를 들어

:

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

currMinute = 2; 
currSeconds = 30; 

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

지금이

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

처럼 NSUserDefaults로 타이머를이 미래의 날짜를 시작 저장

참고 : 끝 날짜가 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 번호를 다시 시작한 후 남은 시간을 얻을 수 있습니다.