好的,我有一些时间,我可以为您提供一个关于如何将数据保存到用户默认值的小教程。
您将希望在创建报价后立即保存创建报价的日期,然后每次您的应用程序进入前台检查该日期。显然,您只想记住这一天,而不是小时、分钟和秒。这是一个小函数:
func makeCleanToday() -> NSDate {
let today = NSDate()
let comps = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: today)
return NSCalendar.currentCalendar().dateFromComponents(comps)!
}
请注意,这会强制解开最后一行的日期,但这在这里很好,因为我没有做任何可能导致dateFromComponents 返回nil。
创建报价后,您将始终调用接下来的两行:
let cleanToday = makeCleanToday()
NSUserDefaults.standardUserDefaults().setObject(cleanToday, forKey: "MyAppDateKey")
显然,您应该使用更好的键来识别它(我建议为此定义一个常量)。这会将您的日期(仅日、月和年)保存在应用的用户默认值中。
下次您的应用进入前台时(为此使用应用委托),请在此处执行此操作:
if let savedDate:NSDate = NSUserDefaults.standardUserDefaults().objectForKey("MyAppDateKey") as? NSDate {
let cleanToday = makeCleanToday()
if savedDate.earlierDate(cleanToday) == savedDate {
// create new sentence
NSUserDefaults.standardUserDefaults().setObject(cleanToday, forKey: "MyAppDateKey")
}
} else {
// create new sentence
NSUserDefaults.standardUserDefaults().setObject(makeCleanToday(), forKey: "MyAppDateKey")
}
请注意,我在此处添加了两个 NSUserDefaults.standardUserDefaults().setObject.... 行只是为了说明会发生什么。您可能已经在报价创建方法中拥有该代码,就像我在上面告诉您的那样。此外,else 部分适用于您第一次运行该应用程序时。那么你没有任何保存在用户默认值中,所以savedDate是nil,你必须像往常一样创建你的报价。
最后一个一般性评论:使用NSCalendar 相对昂贵(尽管它是为这种情况设计的),所以你不应该使用它,例如,在表格或其他东西中填充单元格时(因为这可能会产生负面影响滚动时的帧速率)。在这种情况下,它完全没问题(相对是这里的关键字),我只想让你知道,在你最终将编码推进到遇到这种情况的地步之前。 :) 日期格式化程序也是如此。
哦,关于评论:不用说对不起,我只是想让你知道这里的情况如何,并在你看到你的问题被否决时稍微缓冲一下。我希望这可以帮助你。