答案 0 :(得分:6)
您的应用创意可能包括之前需要执行某些操作 考虑完整用法。例如,在屏幕上加载或呈现内容后,检索数据并执行某些操作等后
只是打算打开应用程序。唯一的目的是让用户点击你的应用程序的图标来启动应用程序,如果他之前将其设置为关闭状态,请不要担心甚至通过你的加载屏幕。
这可能有点不可预测
重要的是要注意iOS可以随时杀死你的进程 应用程序被发送到后台,所以最好在用户之后立即执行 动作。
此外,用户无法再次打开您的应用。
如果要将数据保存到iPhone之外,您可以订阅后台功能,让您的应用暂停一段时间,同时转换到暂停/关闭状态。
您正在寻找的功能是applicationDidEnterBackground(_:)
此方法的优点
您上次使用的应用实际。
有关应用程序生命周期以及如何正确处理它的更多信息,请访问apple documentation about this topic
NSUserDefaults
中。在这种情况下,您应该通过用户创建和实施方式实现某种在线存储。在您的服务器中处理或使用 iCloud 替代方案。NSUserDefaults
中,因为它没有被编入并且可以被修改。在处理存储数据时,简单性是最重要的,有很多方法可以实现这一特定任务。
我会选择:
您可以保存完整的时间戳,以便以后能够改变主意; - )
在我的应用程序中,我会在进行任何更改之前使用当前日期数据(now = NSDate()
)进行数学计算。
now
和last visit date
之间的时间间隔更大
“日”,然后使用first visit date
更新now
。 now
个数据保存到last visit date
存储空间。您的计数器将永远是
now
和first visit date
之间“天”的差异。
如果您的数据不敏感,请将其存储在NSUserDefaults
,否则,如果这会影响您的收入将其存储在其他位置。如果它很敏感,但您不关心用户是否丢失了计数器,请将其保存在本地数据库中( CoreData , Realm 等)
存储新数据的最佳时间(据我考虑)将是关闭意图(包括暂停状态和来电 )通知您的应用程序。
您可以通过多种方式保存此数据,为您提供一些操作空间,只需上次访问以及首次访问该行的日期,然后执行数学。当然,根据需要进行更新并在之前解释过。
答案 1 :(得分:0)
只需在UserDefault
或CoreData
中保存最后一个日期,然后在下一个日期,使用timeIntervalSinceDate
获取timeInterval,如果该值大于24,则除以3600 ,重置号码
答案 2 :(得分:0)
我没有检查但是这个想法会起作用,只需将当前日期(DD-MM-YYYY)存储到Array或list&使用任何Data Persistence Options保存。在添加日期之前(每当启动应用程序 - 您可以使用didFinishLauchingOptions)进入列表检查它是否已经存在。要显示连续的天数,请使用已保存列表的数组计数。
要重置零,只需检查上次日期是否可用。
答案 3 :(得分:0)
private extension Sequence where Element == Date {
var streaks: Int {
let oneDayInSeconds: Double = 60*60*24
let days = self.compactMap { Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: $0) }
let uniq = Set(days).sorted(by: >)
var count = 0
guard var lastStreak = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date()) else { return count }
for date in uniq {
guard date > lastStreak.advanced(by: -oneDayInSeconds - 1) else { break }
count += 1
lastStreak = date
}
return count
}
}