2017-09-19 9 views
-1
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "HH:mm " 

let selectedDate = dateFormatter.string(from: sender.date) 

UserDefaults.standard.set(selectedDate, forKey: "date") 
print(selectedDate) 

\\method to reload the selected time inside the viewdidLoad func 

let selectedDate = UserDefaults.standard.object(forKey: "date") 
example.setDate(selectedDate as! Date ?? Date(), animated: false) 

でエラーが発生しました。しかし、私は、アプリケーションを実行すると、それは、このエラーDataPickerフォーマット

は、型の値をキャストすることができませんでし返す '__NSCFString'(0x108e8b4f0 ')NSDate'(0x108e8c0d0)へ。

私はHHに変換:ミリメートルを私はこのフォーマットでのみ時間を記録したいが、私はそれを

+1

日付を 'UserDefaults'に格納しているので、* 'NSDate' *ではなく* type '__NSCFString' *として返され、' Date'にキャストできません。あなたが何を達成しようとしているのかは不明です。 – vadian

答えて

1

を処理するつもりか分からないので、あなたがしてDateオブジェクトそのものを格納する必要がありますUserDefaultsであり、その文字列表現ではありません。ほとんどの使用例ではDateオブジェクトを格納する方が理にかかります。Dateオブジェクトは絶対的な時点を表し、日付比較やローカル時刻に変換することができます。

また、setDate機能が実際にDateオブジェクトではなく文字列を期待していることのように、したがって、それは日付の文字列表現を生成し、UserDefaultsにそれを保存しても意味がありませんに見えます。

//Save the Date object 
UserDefaults.standard.set(sender.date, forKey: "date") 

//Retrieve the Date object, if it cannot be retrieved, use the current Date 
if let selectedDate = UserDefaults.standard.object(forKey: "date") as? Date { 
    example.setDate(selectedDate, animated: false) 
} else { 
    example.setDate(Date(), animated: false) 
} 
4

アンドレあなたはUserDefaultsにString値を保存して、文字列からNSDateを設定してみてください。あなたがその時だけ心配すればそれはUserDefaultsにあると日付を保存するための私の助言はあなたの要件としてフォーマットされたtimeを得る。節約のために

::取得のために

func datePickerChanged(_ sender: UIDatePicker){ 

    UserDefaults.standard.set(sender.date, forKey: "date") 

} 

func getTime(){ 

    let date = UserDefaults.standard.object(forKey: "date") as! Date 

    let dateFormatter = DateFormatter() 
    dateFormatter.locale = NSLocale.current 
    dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone! //Set your own time zone here. 

    dateFormatter.dateFormat = "HH:mm" 

    print(dateFormatter.string(from: date as Date)) 

    example.setDate(date, animated: false) 

} 

が、それはあなたを助けることを願っています

ここで時間を節約し、取得するための次のステップは、あなたの時間を節約します。

+0

なぜすべての日付を気にする<->文字列の変換?実際の 'Date'を保存し、全ての変換を避けてください。 – rmaddy

+0

@rmaddyはい長時間の変換でしたが、私は自分の答えを更新しました。 ありがとうございます。 –