Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-一个月后重置数据_Ios_Swift - Fatal编程技术网

Ios Swift-一个月后重置数据

Ios Swift-一个月后重置数据,ios,swift,Ios,Swift,我有一个应用程序可以汇总用户输入。正在存储此数据。我希望此用户数据在他开始使用应用程序的一个月后重置为0。一个月后,开始日期显然应为数据重置之日 到目前为止,我已经: func checkIfClearData() { let startDate: Date = Date() var monthComponent = DateComponents() monthComponent.month = 1 let theCalendar = Calendar.curr

我有一个应用程序可以汇总用户输入。正在存储此数据。我希望此用户数据在他开始使用应用程序的一个月后重置为0。一个月后,
开始日期
显然应为数据重置之日

到目前为止,我已经:

func checkIfClearData() {
    let startDate: Date = Date()
    var monthComponent = DateComponents()
    monthComponent.month = 1

    let theCalendar = Calendar.current
    let endDate = theCalendar.date(byAdding: monthComponent, to: startDate)
}

我卡住了。如何包含
currentDate
以及如何正确使用该函数,因为它每月只能调用一次?否则,我估计
endDate
将增加,并且永远无法到达

当应用程序启动时,在UserDefaults中检查一个键(例如“startingDate”)

如果为nil,则将当前日期保存到该键


如果不是零,请阅读。比较保存的日期和今天的日期。如果经过的时间小于1个月,则像往常一样读取存储的数据。如果经过的时间大于等于1个月,请删除所有存储的数据,然后将今天的日期保存到注册表项UserDefaults以重新开始。

使用以下方法比较startDate和endDate

if Date().timeIntervalSince(endDate) < 0 {
    // endDate ahead
} else {
    // endDate expired
}
用法-2每次应用程序在
AppDelegate.swift中启动/进入前台时

func applicationDidBecomeActive(_ application: UIApplication) {
    DataTimer.shared.check()
}

您也可以直接比较两个日期:(
if Date()>endDate
DataTimer.shared.check()
func applicationDidBecomeActive(_ application: UIApplication) {
    DataTimer.shared.check()
}