Ada dua cara menyimpan NSDate di NSUserDefaults yang saya temui.
Opsi 1 - setObject: forKey:
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Opsi 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];
Pro dan kontra
Pilihan 1
Ini tampaknya kompak dan logis. Namun, saya punya kekhawatiran tentang kesalahan ini karena bug Date Formatter .
pilihan 2
Ini tampaknya canggung. Saya juga tidak yakin keakuratannya - dalam satu tes yang saya lakukan, ketika saya mengambil kembali tanggal itu keluar oleh 48 detik, meskipun Apple Docs mengatakan bahwa NSTimeInterval memiliki "akurasi subsecond".
Persyaratan
Metode apa pun yang saya pilih, itu harus:
Tepat dalam satu detik.
Dapat dibaca dan dapat diandalkan.
Pertanyaan saya
Apakah ketidaktepatan dengan Opsi 2 karena saya melakukan sesuatu yang salah?
Manakah dari dua opsi ini yang akan Anda gunakan?
Apakah ada opsi lain yang tidak saya sadari?
Terima kasih!