Esistono due modi per memorizzare un NSDate in NSUserDefaults che ho riscontrato.
Opzione 1 - setObject: forKey:
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Opzione 2 - timeIntervalSince1970
// Set
NSDate *myDate = [NSDate date];
NSTimeInterval myDateTimeInterval = [myDate timeIntervalSince1970];
[[NSUserDefaults standardUserDefaults] setFloat:myDateTimeInterval forKey:@"myDateKey"];
// Get
NSTimeInterval myDateTimeInterval = [[NSUserDefaults standardUserDefaults] floatForKey:@"myDateKey"];
NSDate *myDate = [NSDate dateWithTimeIntervalSince1970:myDateTimeInterval];
Pro e contro
opzione 1
Questo sembra essere compatto e logico. Tuttavia, mi preoccupo che ciò vada storto a causa di bug di Date Formatter .
opzione 2
Questo sembra essere goffo. Inoltre, non sono sicuro della precisione di ciò - in un test che ho fatto, quando ho recuperato la data precedente, era uscito di 48 secondi, nonostante i documenti di Apple affermassero che NSTimeInterval ha "una precisione inferiore al secondo".
Requisiti
Qualunque metodo scelga, deve essere:
Preciso entro un secondo.
Leggibile e affidabile.
La mia domanda
L'inesattezza con l'Opzione 2 è perché sto facendo qualcosa di sbagliato?
Quale di queste due opzioni useresti?
Esiste un'altra opzione di cui non sono a conoscenza?
Grazie!