【问题标题】:How to save information ( Swift application )如何保存信息(Swift 应用程序)
【发布时间】:2016-08-10 14:48:50
【问题描述】:

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

你能帮我吗,我怎样才能在一天中保存相同的报价,当一天结束时生成一个新的报价。我的意思是早上 00:00 点。

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

【问题讨论】:

  • 你会想看看the documentationNSUserDefaults。无意冒犯,但你问的是一个非常基本的东西,有据可查,也许你在问 SO 之前花一些时间进行研究。
  • 一周前我开始使用 swift。我还是新手,不知道如何做这些事情。对不起,如果我的问题对你来说太基本了,但你的答案对我来说还不清楚。如果您给我一个示例或简单的代码,我将不胜感激。谢谢。

标签: ios random save


【解决方案1】:

好的,我有一些时间,我可以为您提供一个关于如何将数据保存到用户默认值的小教程。

您将希望在创建报价后立即保存创建报价的日期,然后每次您的应用程序进入前台检查该日期。显然,您只想记住这一天,而不是小时、分钟和秒。这是一个小函数:

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")

显然,您应该使用更好的键来识别它(我建议为此定义一个常量)。这会将您的日期(仅日、月和年)保存在应用的用户默认值中。

下次您的应用进入前台时(为此使用应用委托),请在此处执行此操作:

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 部分适用于您第一次运行该应用程序时。那么你没有任何保存在用户默认值中,所以savedDatenil,你必须像往常一样创建你的报价。

最后一个一般性评论:使用NSCalendar 相对昂贵(尽管它是为这种情况设计的),所以你不应该使用它,例如,在表格或其他东西中填充单元格时(因为这可能会产生负面影响滚动时的帧速率)。在这种情况下,它完全没问题(相对是这里的关键字),我只想让你知道,在你最终将编码推进到遇到这种情况的地步之前。 :) 日期格式化程序也是如此。

哦,关于评论:不用说对不起,我只是想让你知道这里的情况如何,并在你看到你的问题被否决时稍微缓冲一下。我希望这可以帮助你。

【讨论】:

  • 非常感谢!我很感激!
  • 不客气。如果这解决了您的问题,也许接受和/或支持我的回答。 :)(我认为你是 SO 的新手,这通常是你在这里所做的。我会很感激的。)
  • 哦,哈哈,我忘了这个。没关系。祝你的项目好运!
  • 我只是碰巧进一步查看了它,只是为了记录:Upvoting 需要 15 名声望。您始终可以接受答案(答案旁边的小复选标记)。事实上,即使您作为问题作者也可以通过接受别人的答案来获得声誉。见the help center
猜你喜欢
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2016-12-22
  • 1970-01-01
相关资源
最近更新 更多