您好,我正在创建一个具有两个控件的控件:一个 NSSlider 和一个不断更新的 NSTextField。我向 NSTextField 添加了一个 NSDateFormatter,以便它显示格式化为时间的 slider 的当前值。 slider 的范围为 0 到 86,400 个单位(以便用户在 24 小时的范围内滑动秒数)。
我将我的应用程序连接到共享用户默认 Controller ,以便为用户存储值。
应用程序在 NSTextField 中显示正确的时间,但它始终以秒为单位存储值。例如,如果用户在移动 slider 时选择了 06:32:14,则系统实际上会将 23534.2261709793 存储在 startTime
键中当用户再次打开应用时,他们将看到预期的 06:32:14。
我的问题是当我想读取代码中的变量时:
我可以将值读取为 Double:
let value = NSUserDefaults.standardUserDefaults().objectForKey("startTimeValue") as? Double
这工作正常,如果我尝试将其转换为 NSDate,它将无法工作(值将设置为 nil)。所以我认为在代码中使用 NSDateFormatter 是可行的(因为这是界面构建器为用户查看日期所做的工作的方式):
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.NoStyle
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
let date = dateFormatter.dateFromString((value?.description)!)
在前面的代码中,我创建了日期格式化程序,然后将日期样式设置为空(我只想做时间),并将时间样式设置为较短。但是给出 value.description ("23534.2261709793") 仍然不行。日期仍然为零。
我做错了什么吗?
最佳答案
您从 NSUserDefaults 存储/获取的 double 值是从 1970 年 1 月 1 日星期四开始的时间间隔。因此您需要将该时间间隔提供给 NSDate 构造函数,以便它可以为您构造日期。
let value = NSUserDefaults.standardUserDefaults().objectForKey("startTimeValue") as? Double
let date = NSDate(timeIntervalSince1970: value)
关于swift - 从 NSUserDefaults (Swift) 中的 double 值中检索日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100546/