2017-07-27 20 views
-1

コードを1日に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

それはうまくいったけど、戦争を起こしている「暗黙のうちに「Any?」から「Any」へ強制的に強制的に変換される式を指している印刷行については、 –

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()を使用すると、特定の日付に渡すか、残すことができます現在の日付を配列の日付に追加します。

関連する問題