Existem duas maneiras de armazenar um NSDate nos NSUserDefaults que eu encontrei.
Opção 1 - setObject: forKey:
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Opção 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];
Prós e contras
Opção 1
Isso parece ser compacto e lógico. No entanto, eu tenho preocupações sobre isso dar errado por causa dos erros do Date Formatter .
opção 2
Isso parece ser desajeitado. Também não tenho certeza da precisão disso - em um teste que fiz, quando recuperei a data em que ela estava vencida em 48 segundos, apesar dos documentos da Apple dizerem que o NSTimeInterval tem "precisão de subsegundo".
Exigências
Qualquer que seja o método que eu escolher, deve ser:
Preciso em um segundo.
Legível e confiável.
Minha pergunta
A imprecisão com a opção 2 é porque estou fazendo algo errado?
Qual dessas duas opções você usaria?
Existe outra opção que eu não conheço?
Obrigado!