我正在开发一个iOS应用程序,每天都会生成随机的励志报价。当我关闭应用程序时,再次打开它并单击生成每日报价的按钮,它会显示一个新的。
你能帮助我吗?如何在一天中保存相同的报价,当一天结束时会产生新的报价。我的意思是早上00点。
我想每天保留1个报价,而不是每次打开应用时都有1个报价。
答案 0 :(得分:0)
好的,我有一些时间在手上,我可以为您提供一个关于如何将数据保存到用户默认值的小教程。
您需要在创建报价后立即保存创建报价的日期,然后每次应用程序进入前台检查时都要这样做。显然你只想记住那一天,而不是小时,分钟和秒。这是一个很小的功能:
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")
显然你应该用一个更好的密钥来识别这个(我建议在某个地方定义一个常量)。这会在应用的用户默认值中保存您的日期(仅限日,月和年)。
下次你的应用程序进入前台(使用app delegate),然后在此处执行此操作:
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
相对昂贵(虽然它是针对这种情况设计的),所以你不应该使用它,例如,当填充表格中的单元格时(因为这可能会在滚动期间对帧速率产生负面影响)。在这种情况下,它完全没问题(相对是这里的关键字),我只是想让你知道在你最终将你的编码推进到你遇到这个问题的程度。 :)日期格式化程序也是如此。
哦,关于评论:没有必要说对不起,我只是想让你知道SO上的内容是什么,当你看到你的问题被投票时,缓和了一些下降。我希望这可以帮到你。