【发布时间】:2016-08-04 18:57:03
【问题描述】:
我正在开发一个 iOS 应用程序,它每天都会生成随机的励志名言。 在我关闭应用程序的那一刻,再次打开它并单击生成每日报价的按钮,它会显示一个新的。
你能帮我吗,我怎样才能在一天中保存相同的报价,当一天结束时生成一个新报价。
我希望每天保留 1 条报价,而不是每次打开应用时都保留 1 条报价。
【问题讨论】:
-
Google
NSUserDefaults试试看。
我正在开发一个 iOS 应用程序,它每天都会生成随机的励志名言。 在我关闭应用程序的那一刻,再次打开它并单击生成每日报价的按钮,它会显示一个新的。
你能帮我吗,我怎样才能在一天中保存相同的报价,当一天结束时生成一个新报价。
我希望每天保留 1 条报价,而不是每次打开应用时都保留 1 条报价。
【问题讨论】:
NSUserDefaults 试试看。
您可以通过将报价及其生成时间保存在NSUserDefaults 中来实现这一点(在Swift3 中,这将被称为UserDefaults
首先,生成您的报价,并将其作为字符串存储在变量中。我们称之为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 函数
【讨论】:
myFunctionForGeneratingANewQuote() 替换为您的函数......好吧,生成一个新报价,并将 myFunctionForDisplayingAQuote(storedQuote) 替换为您显示报价 storedQuote 的方式。确保还阅读了 cmets,以便您真正了解代码在做什么
viewDidLoad)