Hay dos formas de almacenar un NSDate en NSUserDefaults que he encontrado.
Opción 1 - setObject: forKey:
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Opción 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];
Pros y contras
Opción 1
Esto parece ser compacto y lógico. Sin embargo, me preocupa que esto salga mal debido a los errores del formateador de fechas .
opcion 2
Esto parece ser torpe. Tampoco estoy seguro de la precisión de la misma: en una prueba que hice, cuando recuperé la fecha en que estaba fuera por 48 segundos, a pesar de que los Documentos de Apple decían que NSTimeInterval tiene "precisión de un segundo".
Requisitos
Cualquier método que elija, debe ser:
Preciso hasta dentro de un segundo.
Legible y confiable.
Mi pregunta
¿Es la inexactitud con la opción 2 porque estoy haciendo algo mal?
¿Cuál de estas dos opciones usarías?
¿Hay otra opción que no conozca?
¡Gracias!