2017-09-19 1 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) 

Mais quand je lance l'application, il retourne cette erreurerreur dans DataPicker Format

Impossible jeter la valeur de type '__NSCFString' (0x108e8b4f0) à 'NSDate' (0x108e8c0d0).

I converti en HH: mm parce que je veux enregistrer seulement le temps dans ce format, mais je ne sais pas comment je vais gérer

+1

Vous stockez la date en tant que 'String' dans' UserDefaults', donc vous le récupérez comme * type '__NSCFString' * plutôt que * 'NSDate' * et vous ne pouvez pas le convertir en 'Date'. On ne sait pas ce que vous allez accomplir. – vadian

Répondre

1

Vous devriez stocker l'objet Date lui-même dans UserDefaults et non sa représentation de chaîne. Dans la plupart des cas, il est plus logique de stocker un objet Date, puisque les objets Date représentent un point absolu dans le temps et vous pouvez donc les utiliser pour la comparaison de dates ou pour les convertir en heures locales.

De plus, il ressemble à ce que la fonction setDate attend en fait un objet Date et non une chaîne, par conséquent, il n'a pas de sens pour générer une représentation de chaîne d'une date, puis stocker que dans 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

Andre vous enregistrez la valeur chaîne dans UserDefaults et essayer de mettre NSDate de String. Si vous ne vous souciez de l'heure que mon conseil pour enregistrer la date comme il est dans UserDefaults et obtenir le time comme formaté selon vos besoins.

Voici les étapes suivantes pour l'enregistrement et la récupération de temps:

Pour sauver:

func datePickerChanged(_ sender: UIDatePicker){ 

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

} 

Pour Récupération:

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) 

} 

espère que cela vous aidera et économisez votre temps.

+0

Pourquoi s'embêter avec toutes les conversions de chaînes <-> de date? Il suffit de stocker le 'Date' réel et éviter toutes les conversions. – rmaddy

+0

@rmaddy oui Cela a été une longue conversion, j'ai mis à jour ma réponse. Merci. –