我想记录她进入文本字段的历史。我打算向UserDefaults注册。但是,当我尝试使用UserDefaults保存它时,“无法分配'nsdate'类型的值吗?”以键入'String'“错误。我认为它不接受文本字段数据,因为它是字符串。以及如何将历史记录保存在内存中?
formatteddate和formatteddate2给出此错误。输出的日期如下:20/04/2019 20:23
let token = try? keychain.getString("chipnumbernew")
chip1InfoString = token
var time = NSDate()
var formatter = DateFormatter()
formatter.dateFormat = "dd/MM/yyyy HH:mm"
var formatteddate = formatter.string(from: time as Date)
var formatteddate2 = formatter.string(from: time as Date)
timertextNew.text = formatteddate
timertext2New.text = formatteddate2
let RetrivedDate = UserDefaults.standard.object(forKey: "timertext") as? NSDate
formatteddate = RetrivedDate
let RetrivedDate2 = UserDefaults.standard.object(forKey: "timertext2") as? NSDate
formatteddate2 = RetrivedDate2
答案 0 :(得分:6)
以下内容将Date
对象另存为Double
(也称为TimeInterval
)。这样可以避免任何日期格式。格式化可能会失去精度,这是不必要的,因为该字符串不适合用户阅读。
// save
UserDefaults.standard.set(Date().timeIntervalSince1970, forKey: key)
// read
let date = Date(timeIntervalSince1970: UserDefaults.standard.double(forKey: key))
答案 1 :(得分:0)
您的问题是您要从用户默认存储中检索NSDate,然后尝试将它们分配给String(格式日期)。
尝试一下;
formatteddate = formatter.string(from: RetrivedDate as Date)
答案 2 :(得分:0)
您可以设置日期并使用用户默认设置存储持久性:
UserDefaults.standard.set(Date(),forKey:”keyname”) as? Date
还记得使用条件强制转换运算符吗?避免崩溃。
要将日期另存为字符串,您可以通过以下文章进行操作: Convert NSDate to String in iOS Swift
答案 3 :(得分:0)
如果只想显示日期值,则可以将其转换并存储为字符串,否则在读取后将其转换/格式化,无论哪种方式,都应确保在保存和读取时使用相同的类型
//save as Date
UserDefaults.standard.set(Date(), forKey: key)
//read
let date = UserDefaults.standard.object(forKey: key) as! Date
let df = DateFormatter()
df.dateFormat = "dd/MM/yyyy HH:mm"
print(df.string(from: date))
// save as String
let df = DateFormatter()
df.dateFormat = "dd/MM/yyyy HH:mm"
let str = df.string(from: Date())
UserDefaults.standard.setValue(str, forKey: key)
// read
if let strOut = UserDefaults.standard.string(forKey: key) {
print(strOut)
}