Frage

ist Es gibt zwei Möglichkeiten zur Herstellung eines NSDate in NSUserDefaults speichern, die ich kenne.

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

Das scheint kompakt und logisch zu sein. Allerdings, ich habe Sorgen darüber schief gehen wegen Datum Formatter Bugs .

Option 2

Das scheint plump zu sein. Ich bin auch nicht sicher für die Richtigkeit der es - in einem Test, den ich tat, als ich das Datum wieder abgerufen war, indem 48 Sekunden, trotz der Apple-Docs sagen, dass NSTimeInterval hat „Subsekunden Genauigkeit“

.

Anforderungen

Egal welche Methode ich wählen, es muss sein:

  1. Precise innerhalb einer Sekunde.

  2. Lesbare und zuverlässig.

Meine Frage

Ist die Ungenauigkeit mit Option 2, weil ich etwas falsch mache ich?

Welche von diesen beiden Möglichkeiten würden Sie nutzen?

Gibt es eine andere Möglichkeit, die ich bin mir nicht bewusst?

Danke!

War es hilfreich?

Lösung

Sie erschweren unnötig Dinge. Warum konvertieren Sie das Datum auf ein Zeitintervall (dann das Zeitintervall auf einen anderen primitiven)? [sharedDefaults setObject:theDate forKey:@"theDateKey"] einfach und mit ihr geschehen. NSDate ist eine der „Haupttypen“ unterstützt durch das PLIST-Format (Daten, Zahlen, Strings, Daten, Wörterbücher und Arrays), so können Sie es einfach direkt speichern.

Siehe die Dokumentation Beweis.

Just speichern und das Datum abrufen direkt und beobachten Sie das Richtige tun (einschließlich Zeitzonen, Präzision, etc.). Es gibt keine Formatierer beteiligt, wie andere gesagt haben.

scroll top