Es gibt zwei Möglichkeiten, ein NSDate in NSUserDefaults zu speichern, auf die ich gestoßen bin.
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];
Vor-und Nachteile
Option 1
Dies scheint kompakt und logisch zu sein. Ich habe jedoch Bedenken, dass dies aufgrund von Date Formatter-Fehlern schief geht .
Option 2
Das scheint ungeschickt zu sein. Ich bin mir auch nicht sicher, wie genau das ist - in einem Test, den ich durchgeführt habe, war das Datum, als ich es zurückerhielt, um 48 Sekunden abgelaufen, obwohl die Apple Docs sagten, dass NSTimeInterval eine "Genauigkeit von weniger als einer Sekunde" hat.
Bedarf
Welche Methode ich auch wähle, es muss sein:
Präzise auf eine Sekunde.
Lesbar und zuverlässig.
Meine Frage
Ist die Ungenauigkeit mit Option 2, weil ich etwas falsch mache?
Welche dieser beiden Optionen würden Sie verwenden?
Gibt es eine andere Option, die mir nicht bekannt ist?
Vielen Dank!