如何在 iOS 应用中保存数据
Posted
技术标签:
【中文标题】如何在 iOS 应用中保存数据【英文标题】:How to save data in iOS app 【发布时间】:2016-08-04 18:57:03 【问题描述】:我正在开发一个 ios 应用程序,它每天都会生成随机的励志名言。 在我关闭应用程序的那一刻,再次打开它并单击生成每日报价的按钮,它会显示一个新的。
你能帮我吗,我怎样才能在一天中保存相同的报价,当一天结束时生成一个新报价。
我希望每天保留 1 条报价,而不是每次打开应用时都保留 1 条报价。
【问题讨论】:
GoogleNSUserDefaults
试试看。
【参考方案1】:
您可以通过将报价及其生成时间保存在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
函数
【讨论】:
非常感谢。你能给我提供一个代码示例吗?我是 Swift 的新手,这对我来说有点困难。目前我正在阅读 json 文件中的引号,如果对您有帮助的话 没问题!我确实为您提供了一个代码示例 - 只需将myFunctionForGeneratingANewQuote()
替换为您的函数......好吧,生成一个新报价,并将 myFunctionForDisplayingAQuote(storedQuote)
替换为您显示报价 storedQuote
的方式。确保还阅读了 cmets,以便您真正了解代码在做什么
非常感谢您的帮助。你太棒了!你会检查我的代码吗?
@IvanSosev 您应该将代码放在通常放置代码以显示报价的任何位置(所以可能是viewDidLoad
)
@IvanSosev 看起来它在正确的位置 - 尝试运行它,看看会发生什么以上是关于如何在 iOS 应用中保存数据的主要内容,如果未能解决你的问题,请参考以下文章