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 повторно возобновить его снова таймер должен возобновить время в соответствии с отведенным временем? как проверить с возобновлением времени? – Ramanan

+0

Затем вы должны сохранять дату и время в Quit (applicationWillTerminate) и снова проверять с запуском (didFinishLaunchingWithOptions), тогда вы можете найти разницу между ними таким образом, чтобы вы могли рассчитать время возобновления. – Ankur

0

В соответствии с вашим требованием вам необходимо указать дату будущего, указанную ниже.

Добавить Текущее время, когда вы запускаете Таймер и добавляете свою минуту & секунд, в какое время вам нужно.

Для примера:

currMinute = 2; 
currSeconds = 30; 

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

Теперь хранить эту будущую дату в NSUserDefaults как этот

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

начать свой таймер:

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 количества времени, которое вы получите обновленные только время.