Istnieją dwa sposoby przechowywania NSDate w NSUserDefaults, z którymi się spotkałem.
Opcja 1 - setObject: forKey:
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Opcja 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];
Plusy i minusy
opcja 1
Wydaje się, że jest to zwięzłe i logiczne. Jednak martwię się, że to pójdzie nie tak z powodu błędów programu Date Formatter .
Opcja 2
To wydaje się niezdarne. Nie jestem też pewien dokładności tego - w jednym z testów, które przeprowadziłem, kiedy odzyskałem datę wstecz, minęło 48 sekund, mimo że w dokumentach Apple Docs stwierdzono, że NSTimeInterval ma „dokładność podsekundową”.
Wymagania
Niezależnie od wybranej metody, musi to być:
Precyzja w ciągu sekundy.
Czytelne i niezawodne.
Moje pytanie
Czy jest to niedokładność w Opcji 2, ponieważ robię coś źle?
Której z tych dwóch opcji byś użył?
Czy jest inna opcja, której nie jestem świadomy?
Dzięki!