2017-07-27 53 views
-1

我希望代碼每天運行一次,但我想要完成此操作的方式是在單擊該按鈕後禁用該按鈕,然後在超過24小時後重新啓用該按鈕。如何保存用戶快速按下按鈕的日期?

下面的代碼是否正確,以保存用戶按下按鈕的日期?

if distance < radius{ 
    Total_Points += 10 
    pointsLabel.text = "Total Points: \(Total_Points)" 

    getPointsOutlet.isEnabled = false 

    let clickdate = UserDefaults.standard 

    if var timeList = clickdate.object(forKey: "timeList") as? [Date]{ 
     timeList.append(Date()) 
     clickdate.set(timeList, forKey: "timeList") 
    } else { 
     clickdate.set([Date()], forKey: "timeList") 
    } 
    clickdate.synchronize() 
} 


let PointsDefault = UserDefaults.standard 
PointsDefault.setValue(Total_Points, forKey: "Total Points") 
+0

每次調用UserDefaults.standard時都不需要創建新變量,您可以按原樣使用它(例如'UserDefaults.standard.setValue(...)'或定義它一次並重用它(例如'let defaults = UserDefaults.standard'和更高版本'defaults.setValue(...)' – Paolo

+0

謝謝,我會改變這種情況,但保存用戶按下按鈕的日期又如何呢? –

回答

0

你可以當你在按鍵敲擊保存使用Userdefaults然後你ViewDidAppear,viewDidLoad中內UIApplicationWillEnterForeground通知方法就把檢查從用戶默認獲得DATEVALUE,然後將日期值取的差異這種方式實現當前日期和上次存儲日期,並相應地啓用了您的按鈕。

lazy var userDefaults: UserDefaults = { 
     return UserDefaults.standard 
    }() 
func ViewDidLoad() { 
    UserDefaults.set(Date(), forKey:"date") 
    userDefaults.synchronize() 
} 

func someMethodWhereYouWantToGetValue() { 
guard let value = userDefaults.object(forKey: "date") as? Date else 
{return} 
print(value) 
} 
+0

謝謝,但我怎麼保存日期?我試圖在我的代碼上面,但我不知道它是否正確 –

+0

試試這個: - 讓def = UserDefaults.standard \t \t def.set(NSDate(),forKey:「日期「) \t \t print(def.object(forKey:」date「)) –

+0

它的工作,但我得到一場戰爭寧爲打印行說「表達式隱式強制從'任何?'任何'」 –

0

您的代碼

let clickdate = UserDefaults.standard 

if var timeList = clickdate.object(forKey: "timeList") as? [Date]{ 
    timeList.append(Date()) 
    clickdate.set(timeList, forKey: "timeList") 
} else { 
    clickdate.set([Date()], forKey: "timeList") 
} 
clickdate.synchronize() 

是罰款添加日期保存日期的數組。你可以拉的是到一個單獨的功能:

func addDateToDefaults(date: Date? = nil) { 
    let defaults = UserDefaults.standard 

    if date = nil { 
     date = Date() 
    } 

    if var timeList = defaults.object(forKey: "timeList") as? [Date]{ 
     timeList.append(date) 
     defaults.set(timeList, forKey: "timeList") 
    } else { 
     defaults.set([date!], forKey: "timeList") 
    } 
} 

然後,你可以調用從一個按鈕動作:

@IBAction func buttonClicked(_ sender: UIButton) { 
    addDateToDefaults() 
    //The rest of your button action code goes here 
} 

通過上面的功能addDateToDefaults(),你可以通過在特定的日期,或離開關閉日期參數,它會將當前日期附加到日期數組中。