Pergunta

Último recurso isso, como não posso para a vida de mim!

Estou definindo uma data quando meu aplicativo está fechado (usando o ApplicationWilterinate) nos padrões do usuário

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDate *timeClosed = [[NSDate alloc] init];
[defaults setObject: timeClosed forKey:@"svdTimeClosedApp"];

Então, quando o aplicativo é lançado, eu quero comparar desta vez usando

NSDate *timeSaved = svdTimeClosedApp;
NSDate *timeNow = [[NSDate alloc] init];
double timeInterval = [timeSaved timeIntervalSinceDate:timeNow];
NSLog(@"time now = %@, time saved = %@, time diff = %@", timeNow, timeSaved, [NSString stringWithFormat:@"%d",timeInterval]);

Tentei emitir isso na janela de log esperando ver uma sequência bem formatada de cerca de 20 segundos. O problema é que está saindo como 2047868928!

Alguma ideia?!

(Saída da janela de log abaixo)

time now = 2009-12-19 20:54:02 +0000, time saved = 2009-12-19 20:48:29 +0000, time diff = 2047868928

Obrigado por qualquer ajuda!

Foi útil?

Solução

Existem alguns problemas. Primeiro, em seu stringWithFormat: Você deseja usar %G, não %D, %D é para valores inteiros. Além disso, você deve fazer [timeNow timeIntervalSinceDate:timeSaved] Sua chamada atual lhe dará um valor negativo.

Outras dicas

Aqui está o código que eu uso.

No meu aplicativo, quando o usuário sincroniza alguns dados, eu gravo a data/hora atual usando este código:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:[NSDate date] forKey:@"LastSyncDate"];
[prefs synchronize];

Então, se eu quiser ver quantos dias tem sido desde a última vez que eles sincronizam, posso usar isso:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSDate* dateOfLastSync = [prefs objectForKey:@"LastSyncDate"];
if (dateOfLastSync != nil)
{
    NSDate *timeNow = [NSDate date];
    double SECONDS_TO_DAY = 60 * 60 * 24;
    int timeIntervalInDays = (int)([timeNow timeIntervalSinceDate:dateOfLastSync] / SECONDS_TO_DAY);
    NSLog(@"The last sync was %d days ago.", timeIntervalInDays);
}

Espero que isto ajude.

Mike

www.mikesknowledgebase.com

Eu acho que você tem o seu timeInterval Cálculo para trás, não é? Eu acho que você quer dizer que isso inverteu.

double timeInterval = [timeNow timeIntervalSinceDate:timeSaved];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top