Есть два способа хранения NSDate в NSUserDefaults, с которыми я сталкивался.
Вариант 1 - setObject: forKey:
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Вариант 2 - времяIntervalSince1970
// 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];
Плюсы и минусы
Вариант 1
Это кажется компактным и логичным. Тем не менее, я беспокоюсь о том, что это происходит неправильно из-за Ошибки Date Formatter.
Вариант 2
Это кажется неуклюжим. Я также не уверен в его точности - в одном из тестов, которые я сделал, когда я вернул дату назад, он вышел на 48 секунд, несмотря на то, что Apple Docs заявляет, что NSTimeInterval имеет "субсекундную точность".
Требования
Какой бы метод я ни выбрал, он должен быть:
-
Точность в течение секунды.
-
Читаемость и надежность.
Мой вопрос
Является ли неточность с Вариантом 2, потому что я делаю что-то неправильно?
Какой из этих двух вариантов вы бы использовали?
Есть ли другой вариант, о котором я не знаю?
Спасибо!