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

时间:2015-02-17 21:11:13

标签: ios iphone swift nsuserdefaults

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

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

由于

3 个答案:

答案 0 :(得分:4)

*

适用于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。)在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")

        }
    }

答案 1 :(得分:2)

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

答案 2 :(得分:0)

首先要考虑的一些事项。

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

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

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

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

假设您不需要严格执行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禁用按钮,你将需要检查你何时重新进入你的应用程序,并开始一个新的计时器剩下的时间。