2016-10-26 14 views
0

私はプログラミングとSwiftには新しいです。私が構築しているアプリは簡単ではなく、ユーザーが設定したUIDatePickerによってトリガーされる単純なローカル通知を追加したいと考えています。私は通知を設定することができましたが、私はアプリを再起動するたびにUIDatePickerをリセットしないようにする方法を理解しようとしています。ここで(ものがAppDelegate.swiftで起こっなし)、関連するコードは次のとおりです。UserDefaultsを使用してUIDatePickerから格納するにはどうすればよいですか?

@IBAction func datePicker(_ sender: UIDatePicker) { 

    let selectedDate = sender.date 
    let delegate = UIApplication.shared.delegate as? AppDelegate 
    delegate?.scheduleNotification(at: selectedDate) 

} 

答えて

0

DateNSCodingに準拠していないので、あなたが直接ユーザデフォルトでそれを格納することはできません。 "プロパティリストタイプ"(プロパティリストに格納できるもののタイプ、つまりIntDoubleStringDictionaryなど)に変換する必要があります。このケースでは、変換されますDateDoubleに:

let selectedDate = sender.date 
let timeSince1970 = selectedDate.timeIntervalSince1970 
// now we have the double value, we can store it in user defaults! :) 
UserDefaults.standard.set(timeSince1970, forKey: "myDate") 

EDIT:

おっと!

UserDefaults.standard.set(selectedDate, forKey: "myDate") 

格納されている日付を取り戻すと日付ピッカーの選択日付としてそれを設定するには、単純に次の操作を行います。私はこの1つ間違っを得たように、あなた実際に直接ユーザデフォルトでDateを保存することができそうですviewDidLoad中:

let selectedDate = UserDefaults.standard.object(forKey: "myDate") as? Date 
myDatePickerOutlet.setDate(selectedDate ?? Date(), animated: false) 

日付としてDoubleを格納した場合、あなたはこのようにそれを取得することができます。

let selectedDate = Date(
    timeIntervalSince1970: UserDefaults.standard.double(forKey: "myDate")) 
+0

動作させられないようです。あなたのコードには "myDatePickerOutlet"がありますが、私はUIDatePickerからのIBActionしか持っていません。私は私のUIDatePickerからIBOutletを追加しようとしましたが、そのトリックはしませんでした。 –

+0

@RichardRenklintあなたはただのコンセントを追加することはできません。コンセントが必要です。 – Sweeper

+0

Ok。だから私は通知を乱すことなく正しい方法でそれを追加しますか?また、 "IBAction func datePicker"の中にコードを入れるべきかどうかはわかりません。 –

関連する問題