Il y a deux façons de stocker une NSDate dans NSUserDefaults que j'ai rencontrées.
Option 1 - setObject:forKey :
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Option 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];
Avantages et inconvénients
Option 1
Cela semble être compact et logique. Cependant, je crains que cela ne tourne mal à cause de Bogues du formateur de date .
Option 2
Cela semble être maladroit. Je ne suis pas non plus certain de la précision de cette méthode : lors d'un de mes tests, lorsque j'ai récupéré la date, elle était décalée de 48 secondes, alors que les documents d'Apple indiquent que NSTimeInterval a une "précision inférieure à la seconde".
Exigences
Quelle que soit la méthode que je choisisse, elle doit l'être :
-
Précis à la seconde près.
-
Lisible et fiable.
Ma question
L'imprécision de l'option 2 est-elle due au fait que je fais quelque chose de mal ?
Laquelle de ces deux options utiliseriez-vous ?
Existe-t-il une autre option dont je ne suis pas au courant ?
Gracias.