Il y a deux façons de stocker un 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 - timeIntervalDepuis 1970
// 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 se passe mal à cause des bogues du formateur de date .
Option 2
Cela semble maladroit. Je ne suis pas non plus sûr de l'exactitude de celui-ci - dans un test que j'ai fait, lorsque j'ai récupéré la date, il était dépassé de 48 secondes, malgré les documents Apple disant que NSTimeInterval a une "précision inférieure à la seconde".
Exigences
Quelle que soit la méthode que je choisis, elle doit être:
Précis à moins d'une seconde.
Lisible et fiable.
Ma question
L'inexactitude de l'option 2 est-elle due au fait que je fais quelque chose de mal?
Laquelle de ces deux options utiliseriez-vous?
Y a-t-il une autre option dont je ne suis pas au courant?
Merci!