Ios 使用NSUserDefaults在SWIFT中添加24小时倒计时计时器
我试图添加一个计时器,当用户单击按钮时,它会启动一个计时器24小时,并在接下来的24小时内禁用该按钮。之后,它将再次启用。对于类似的事情有一些答案,但在SWIFT中并非100%有用 我面临的主要问题是,我希望这对每个用户都是特定的。因此,每点击一个用户就需要24小时。比如说:如果我“喜欢”某样东西,那么你想在24小时内再次“喜欢”某样东西,但仍然可以“喜欢”另一种东西Ios 使用NSUserDefaults在SWIFT中添加24小时倒计时计时器,ios,iphone,swift,nsuserdefaults,Ios,Iphone,Swift,Nsuserdefaults,我试图添加一个计时器,当用户单击按钮时,它会启动一个计时器24小时,并在接下来的24小时内禁用该按钮。之后,它将再次启用。对于类似的事情有一些答案,但在SWIFT中并非100%有用 我面临的主要问题是,我希望这对每个用户都是特定的。因此,每点击一个用户就需要24小时。比如说:如果我“喜欢”某样东西,那么你想在24小时内再次“喜欢”某样东西,但仍然可以“喜欢”另一种东西 谢谢您可以通过设置实际日期+1天并将其保存到您的NSUserDefaults: 因此,在按下按钮的方法中,您可以执行以下操作:
谢谢您可以通过设置实际日期
+1天
并将其保存到您的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
方法中检查它,如applicationdifinishlaunchingwithoptions
//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
}
}
首先要考虑的一些事情。 这个按钮不能被破坏有多重要 如果您依赖于设备的当前时间和日期,则用户始终可以在设备设置中将其向前移动一天 您希望在应用程序之外发生任何行为吗 是否应通知用户该按钮现在已启用 假设你不需要严格执行24小时期限,也不想通知用户(他们可以在返回应用程序时发现),那么你只需要做几件事 按下按钮时获取时间戳,启动NSTimer 24小时,并将时间戳保存到NSUserDefault
//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")
现在,如果用户从未离开过你的应用程序,那么你的应用程序会很好。在现实生活中,他们会这样做,因此如果需要禁用按钮,您需要在重新进入应用程序时根据时间戳进行检查,并根据剩余时间启动新计时器。*
适用于Swift 3
*
我每天都有一个视频广告,我的用户可以通过它来获取额外的现金。这是我用来确保他们每天只能看一次的
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.)在viewDidLoad
或didMoveToView
中调用:
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")
}
}
如果让waitingDate…而不是从“文件顶部”调用,则应在之后调用let todaysDate=NSDate()。因为如果你想在视图中实现它,例如作为一个检查,然后将它放在文件的顶部,只会在首次加载视图时保存,并且在你关闭应用程序之前不会更新。