如何在 iOS 应用中保存数据

Posted

技术标签:

【中文标题】如何在 iOS 应用中保存数据【英文标题】:How to save data in iOS app 【发布时间】:2016-08-04 18:57:03 【问题描述】:

我正在开发一个 ios 应用程序,它每天都会生成随机的励志名言。 在我关闭应用程序的那一刻,再次打开它并单击生成每日报价的按钮,它会显示一个新的。

你能帮我吗,我怎样才能在一天中保存相同的报价,当一天结束时生成一个新报价。

我希望每天保留 1 条报价,而不是每次打开应用时都保留 1 条报价。

【问题讨论】:

Google NSUserDefaults 试试看。 【参考方案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 中,NSUserDefaultsNSDate 的所有实例都将分别替换为新名称 UserDefaultsDate

当你想显示报价时,你应该调用上面的代码。在您的情况下,这很可能是您的 viewDidLoad 函数

【讨论】:

非常感谢。你能给我提供一个代码示例吗?我是 Swift 的新手,这对我来说有点困难。目前我正在阅读 json 文件中的引号,如果对您有帮助的话 没问题!我确实为您提供了一个代码示例 - 只需将 myFunctionForGeneratingANewQuote() 替换为您的函数......好吧,生成一个新报价,并将 myFunctionForDisplayingAQuote(storedQuote) 替换为您显示报价 storedQuote 的方式。确保还阅读了 cmets,以便您真正了解代码在做什么 非常感谢您的帮助。你太棒了!你会检查我的代码吗? @IvanSosev 您应该将代码放在通常放置代码以显示报价的任何位置(所以可能是viewDidLoad @IvanSosev 看起来它在正确的位置 - 尝试运行它,看看会发生什么

以上是关于如何在 iOS 应用中保存数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 应用程序中缓冲视频并保存在本地数据库中?

如何在 iOS 中保存 UIImageView 数据

我们如何检索在 iOS 中使用核心数据保存的数据

本地保存数据(IOS)

如何在 iOS 上拍照并保存在 SQLite 数据库中

如何在 ios 的 Plist 文件中保存、检索、删除和更新我的数据?