如何使用 NSUserDefaults 和 NSDateComponent 来存储?

Posted

技术标签:

【中文标题】如何使用 NSUserDefaults 和 NSDateComponent 来存储?【英文标题】:How to use NSUserDefaults with NSDateComponent to store? 【发布时间】:2016-04-29 03:22:27 【问题描述】:

我需要做以下事情,我需要你的帮助:

    创建一个文本字段供用户输入日期。当用户在安装后第一次打开应用程序时会发生这种情况。 与当前日期比较 显示差异。 存储差异,以便在后续加载 App 时,显示加载的差异。

我的代码如下所示(稍后我会将常量更改为从 UITextField 输入)

let currentDate = NSDate()

let dataformatterCurrent = NSDateFormatter()

dataformatterCurrent.dateFormat = "MMMM dd, yyyy, HH:mm"

let convertedCurrentDate = dataformatterCurrent.stringFromDate(currentDate)

let dateformatter = NSDateFormatter()

dateformatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let dateAskumar = "2015-10-08 14:25:37"

let date1 = dateformatter.dateFromString(dateAskumar)!

let diffDateComponents = NSCalendar.currentCalendar().components([NSCalendarUnit.Month, NSCalendarUnit.Day, NSCalendarUnit.Hour, NSCalendarUnit.Minute], fromDate: date1, toDate: currentDate, options: NSCalendarOptions.init(rawValue: 1))

请帮助您了解如何使用 NSUserDefaults 保存 diffDateComponents 变量。

【问题讨论】:

为什么要使用nsurl?你可以只使用 NSUserDefaults。 你的问题没有多大意义。什么网址?您希望如何(以及为什么)将 URL 用于日期组件? 我纠正了错字,它的 NSuserdefault 而不是 nsurl。感谢您指出这一点。 你必须实现NSCodingNSDateComponents 以将它们存储在NSUserDefaults ,但这不是一个好主意,我也不知道它是否可能,我建议你改变与 String 或 Int 的区别,然后很容易存储,就像在你的情况下,一个字符串 MMMM dd, yyyy 或 sth 就足够了 为什么要将组件存储在NSUserDefaults 中?只需存储date1 【参考方案1】:

将日期组件放入字典中,并将其存储在NSUserDefaults

例子:

let currentDate = NSDate()
let unitFlags: NSCalendarUnit = [.Month, .Day, .Hour, .Minute]
let components = NSCalendar.currentCalendar().components(unitFlags, fromDate: date1, toDate: currentDate, options: [])
let difference = ["months": components.month, "days": components.day, "hours": components.hour, "minutes": components.minute ]
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(difference, forKey: "difference")

这样你就不需要处理日期的字符串表示了。当然,正如@rmaddy 指出的那样,如果您始终将其与当前日期进行比较,您可以只存储和检索另一个日期。

更新:我知道这不会存储整个NSDateComponents,所以如果你需要它,你必须实现NSCoding。但如果您只对其中的几个组件感兴趣,那么这对您来说就足够了。

【讨论】:

以上是关于如何使用 NSUserDefaults 和 NSDateComponent 来存储?的主要内容,如果未能解决你的问题,请参考以下文章

NSD 和 WifiP2pManager 有啥不同?

如何使用 NSUserDefaults 和 NSDateComponent 来存储?

如何使用 NSUserDefaults 检查当前时间和上次发布时间?

如何使用 NSUserDefaults 存储和加载 BOOL 数组或 int 数组? (IOS 7)

如何将 NSUserDefaults 转换为 CoreData

NSUserDefaults 自动加载和保存数据