Domanda

ultima risorsa questo come non posso per la vita di me lavorare fuori!

Sto installando una data in cui la mia applicazione è chiuso (utilizzando applicationWillTerminate) in default degli utenti

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

poi, quando viene lanciato l'applicazione, voglio mettere a confronto questa volta 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]);

Ho cercato di uscita presente alla finestra di log in attesa di vedere una stringa formattata di circa 20 secondi. Il problema è che è venuta fuori come 2.047.868,928 mila!

Tutte le idee?!

(uscita della finestra di log di seguito)

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

Grazie per qualsiasi aiuto!

È stato utile?

Soluzione

ci sono un paio di questioni. In primo luogo, nella vostra stringWithFormat: si desidera utilizzare% g, non% d,% d è per i valori interi. Inoltre, si dovrebbe fare [timeNow timeIntervalSinceDate:timeSaved] la chiamata in corso vi darà un valore negativo.

Altri suggerimenti

Ecco il codice che uso.

Nella mia app, quando l'utente sincronizza alcuni dati, mi registrare la data / ora corrente utilizzando questo codice:

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

Quindi, se voglio vedere quanti giorni è stato dalla loro ultima sincronizzata, posso usare questo:

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);
}

Spero che questo aiuti.

Mike

www.MikesKnowledgeBase.com

Penso che tu abbia il calcolo timeInterval all'indietro, non è vero? Credo che si vuole dire è invertita.

double timeInterval = [timeNow timeIntervalSinceDate:timeSaved];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top