我正在开发一个iOS应用程序,每天都会生成随机的励志报价。 当我关闭应用程序时,再次打开它并单击生成每日报价的按钮,它会显示一个新的。
你能帮帮我吗,我怎么能在一天中保存相同的报价,当一天结束时会产生一个新报价。
我想每天保留1个报价,而不是每次打开应用时都有1个报价。
答案 0 :(得分:1)
您可以通过保存引用及其在NSUserDefaults
中生成的时间来实现此目的(在Swift3中,这将被称为UserDefaults
首先,生成引号,并将其作为String存储在变量中。我们称之为myQuote
。接下来,通过初始化一个新的NSDate
对象(从Swift 3,Date
开始)获取当前时间,并获取自1970年以来的时间间隔(在Swift中为.timeIntervalSince1970
)并将其存储在一个变量,我们称之为myTime
。
然后,当用户打开应用程序时,获取存储的时间,并检查它是否超过一天。如果是,则生成新报价并存储。如果不是,只显示存储的报价。
以下是使用 Swift 2
进行此操作的示例// get the quote stored in NSUserDefaults for the key "storedQuote"
let storedQuote: String? = NSUserDefaults.standardUserDefaults().stringForKey("storedQuote")
// get the time stored in NSUserDefaults for the key "storedTime"
let storedTime: Double = NSUserDefaults.standardUserDefaults().doubleForKey("storedTime")
// get the current time interval since 1970
let currentTime = NSDate().timeIntervalSince1970
let quoteToDisplay: String
// if the stored quote doesn't exist, or it has been more than
// a day (60 * 60 * 24 seconds) since the quote was stored
if(storedQuote == nil || currentTime - storedTime >= (60 * 60 * 24)){
// generate a new quote
quoteToDisplay = myFunctionForGeneratingANewQuote()
// store the newly generated quote for the key "storedQuote"
NSUserDefaults.standardUserDefaults().setObject(quoteToDisplay, forKey: "storedQuote")
// store the current time for the key "storedTime"
NSUserDefaults.standardUserDefaults().setObject(currentTime, forKey: "storedTime")
NSUserDefaults.standardUserDefaults().synchronize()
}
else{
// otherwise, the quote != nil and was generated less than a day ago
// so this one should be displayed
quoteToDisplay = storedQuote!
}
//display quoteToDisplay
myFunctionForDisplayingAQuote(storedQuote)
在Swift 3中,NSUserDefaults
和NSDate
的所有实例将分别替换为新名称UserDefaults
和Date
。
每当您想要显示引号时,都应该调用上面的代码。在您的情况下,这很可能是您的viewDidLoad
函数