在我的应用设置页面中,用户可以选择在每天凌晨3点或下午3点清除其数据,具体取决于他们的日程安排。我正在寻找一种可靠的方法。
到目前为止,我已经尝试存储自1970年1月1日起安装的秒数,然后每次打开应用程序时,我都会获得自1970年以来的当前秒数,并比较它们以确定数量是否达到或超过86400,是24小时。如果是,我清除数据并用清除时间替换存储的秒数,如果它没有做任何事情。如果我只想清除自上次清除后24小时或更长时间内的数据,这将非常有用,但我真正想要做的是清除数据,如果它超过了用户设定的时间,并清楚地显示数据。那天已经完成了。
例如:
有关如何实现这一目标的任何想法?
答案 0 :(得分:0)
嗯,我不确定你是如何计划处理它的(使用推送通知/本地通知/或如果用户将应用程序放在前台,则进行简单检查)
但是,我会创建一个本地通知:
let notification = UILocalNotification()
notification.fireDate = Date().addingTimeInterval(86400)
UIApplication.sharedApplication().scheduleLocalNotification(notification)
处理结算,并在24小时后再次重置通知。
无声推送通知会很好,因为您可以每24小时清除一次数据,而无需用户考虑甚至打开应用程序。但是,您需要后端逻辑来处理向设备发送这些通知;你将重置时间限制在凌晨3点或下午3点,所以我认为实施起来不会太糟糕。
请记住,您的运行时间限制为30秒。此外,静默通知仅在应用程序暂停时才会完成,如果应用程序已被用户终止,则不会调用委托方法。
- 编辑 -
推送通知对此有点太多了,我一定错过了你想要在app开始时发生这一点的部分(对不起)....
你可以写一个Date
类的扩展名:
func dateByAddingDays(_ daysToAdd: Int) -> Date {
let calendar = Calendar.current
var days = DateComponents()
days.day = daysToAdd
return (calendar as NSCalendar).date(byAdding: days, to: self, options: [])
}
按照您的意愿保存此日期,然后在应用加载时将保存的日期与当前日期进行比较,如果它通过您的检查,则删除数据。您不必在这里使用天数,您可以用小时/分钟等替换天数...... var hours = DateComponents()
- > hours.hour = hoursToAdd