使用NSUserDefaults在SWIFT中添加24小时倒数计时器

我试图添加一个计时器,当用户点击按钮时,它启动计时器24小时,并在接下来的24小时内禁用该按钮。 之后再次启用它。 对于类似的事情,有一些答案,但在SWIFT中这样做并非100%有用。

我遇到的主要问题是我希望这对每个用户都是特定的。 所以每次点击一个用户需要24小时。 例如:如果我喜欢某种东西,那么你希望能够在24小时内再次“喜欢”那个特定的东西,但仍然可以“喜欢”另一种东西?

谢谢

你可以通过设置实际日期+ 1 day并将其保存到NSUserDefaults :。

因此,在按下按钮的方法中,您可以执行以下操作:

 //user pressed button: func buttonPressed(){ //current date let currentDate = NSDate() let calendar = NSCalendar.currentCalendar() //add 1 day to the date: let newDate = calendar.dateByAddingUnit(NSCalendarUnit.CalendarUnitDay, value: 1, toDate: currentDate, options: NSCalendarOptions.allZeros) NSUserDefaults.standardUserDefaults().setValue(newDate, forKey: "waitingDate") //disable the button } 

并检查您可以检索信息的时间。 我建议在AppDelegate方法中检查它,如applicationDidFinishLaunchingWithOptions

 //call it whereever you want to check if the time is over if let waitingDate:NSDate = NSUserDefaults.standardUserDefaults().valueForKey("waitingDate") as? NSDate{ let currentDate = NSDate() //If currentDate is after the set date if(currentDate.compare(waitingDate) == NSComparisonResult.OrderedDescending){ //reenable button } } 

*

适用于Swift 3

*

我有一个每日video广告,我的用户可以查看以获得额外的现金。 这是我用来确保他们每天只能查看一次。

1.)创建一个在用户触发时调用的函数。

 func set24HrTimer() { let currentDate = NSDate() let newDate = NSDate(timeInterval: 86400, since: currentDate as Date) UserDefaults.standard.setValue(newDate, forKey: "waitingDate") print("24 hours started") //disable the button } 

2.)在文件顶部创建一个变量。

 let todaysDate = NSDate() 

3.)在viewDidLoaddidMoveToView调用中:

 if let waitingDate:NSDate = UserDefaults.standard.value(forKey: "waitingDate") as? NSDate { if (todaysDate.compare(waitingDate as Date) == ComparisonResult.orderedDescending) { print("show button") } else { print("hide button") } } 

首先要考虑的几件事。

这个按钮无法被破坏有多重要?

如果您依赖于设备的当前时间和日期,那么用户可以随时在设备设置中将其向前移动一天。

您是否希望在应用程序之外发生任何行为?

应该通知用户该按钮现在已启用

假设你不需要严格执行24小时,并且你不想通知用户(他们可以在他们返回你的应用程序时找到它们),那么你只需要做一些事情。

按下按钮时获取timeStamp,启动NSTimer 24小时,并将timeStamp保存到NSUserDefaults。

 //Assuming you have a method named enableButton on self let timer = NSTimer.scheduledTimerWithTimeInterval(86400, target: self, selector: "enableButton", userInfo: nil, repeats: false) NSUserDefaults.standardUserDefaults().setObject(NSDate(), forKey: "timeStamp") 

现在如果用户永远不会离开你的应用程序,那么你的好 在现实生活中他们会这样做,因此如果您需要根据timeStamp禁用按钮并在剩余的时间内启动新计时器,则需要检查何时重新进入应用程序。