Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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 使用NSUserDefaults在SWIFT中添加24小时倒计时计时器_Ios_Iphone_Swift_Nsuserdefaults - Fatal编程技术网

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

Ios 使用NSUserDefaults在SWIFT中添加24小时倒计时计时器,ios,iphone,swift,nsuserdefaults,Ios,Iphone,Swift,Nsuserdefaults,我试图添加一个计时器,当用户单击按钮时,它会启动一个计时器24小时,并在接下来的24小时内禁用该按钮。之后,它将再次启用。对于类似的事情有一些答案,但在SWIFT中并非100%有用 我面临的主要问题是,我希望这对每个用户都是特定的。因此,每点击一个用户就需要24小时。比如说:如果我“喜欢”某样东西,那么你想在24小时内再次“喜欢”某样东西,但仍然可以“喜欢”另一种东西 谢谢您可以通过设置实际日期+1天并将其保存到您的NSUserDefaults: 因此,在按下按钮的方法中,您可以执行以下操作:

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

我面临的主要问题是,我希望这对每个用户都是特定的。因此,每点击一个用户就需要24小时。比如说:如果我“喜欢”某样东西,那么你想在24小时内再次“喜欢”某样东西,但仍然可以“喜欢”另一种东西


谢谢

您可以通过设置实际日期
+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()。因为如果你想在
视图中实现它,例如作为一个检查,然后将它放在文件的顶部,只会在首次加载视图时保存,并且在你关闭应用程序之前不会更新。