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

Using NSUserDefaults to add a 24hour countdown timer in SWIFT

我正在尝试添加一个计时器,当用户单击一个按钮时,它会启动一个计时器 24 小时,并在接下来的 24 小时内禁用该按钮。之后它再次启用。在 SWIFT.

中,有一些类似但不是 100% 有用的答案

我遇到的主要问题是我希望这对每个用户都是特定的。因此,该用户的每次点击都是 24 小时。因此,例如:如果我 'like' 某些东西,那么您希望能够在 24 小时内再次 'like' 那个特定的东西,但仍然可以 'like' 不同的东西?

谢谢

您可以通过设置实际日期 + 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
    }
}

首先要考虑的几件事。

这个按钮不能被颠覆有多重要?

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

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

是否应通知用户该按钮现已启用

假设您不需要严格执行 24 小时期限,并且您不想通知用户(他们可以在 return 访问您的应用程序时发现),那么您只需做一些事情。

按下按钮时获取时间戳,启动 NSTimer 24 小时,并将时间戳保存到 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")

现在,如果用户从不离开您的应用程序,那您就很好了。在现实生活中它们会,因此您需要检查何时重新进入您的应用程序是否需要根据时间戳禁用该按钮,并根据剩余时间启动一个新计时器。

*

适用于 Swift3

*

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

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")

        }
    }