2016-07-13 8 views
-3

Ich habe ein Datum in einer früheren Version meiner Anwendung in NSUserDefaults in einem bestimmten Datumsformat als Zeichenfolge in einem Array gespeichert.So konvertieren Sie Zeichenfolge in ein anderes Datumsformat ohne Fehler

Mein Problem viele meiner App ist seit dieser Version geändert, und jetzt will ich das gespeicherte Datum der letzten Version auf das Datum-Format konvertieren ich von jetzt an

Hier verwenden werden ist der Code, den ich lustig.

if userDefault.objectForKey("day") == nil { 
      return 
     } else { 
      // Add the first date created from previous version 
      let day = userDefault.objectForKey("day") as? String 
      let dateFormatter = NSDateFormatter() 
      dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
      let date: NSDate = dateFormatter.dateFromString(day!)! 

Der Fehler 'fataler Fehler: unerwartet null gefunden, während ein optionaler Wert auspacken' kommt auf dieser Linie

let date: NSDate = dateFormatter.dateFromString(day!)! 

Gewinde 1: EXC_BREAKPOINT (code = 1 ....

+0

einfach Ihren Code überprüft, funktioniert gut und ändert das Datumsformat. Sind Sie sicher, dass etwas von Ihnen NSUserDefaults als "Tag" zurückgegeben wird? –

+0

Nun, ich erwarte etwas. Wenn ich eine vorherige Version aus dem App Store herunterlade, ein Datum darin festlege und es dann über Xcode auf die aktuelle Version aktualisiere, erscheint der obige Fehler – Khoury

+0

Nun, man kann nicht einfach etwas erwarten. Ich bin mir ziemlich sicher, dass in NSUserDefaults nichts mit key 'day' gespeichert ist. Was Sie tun können, ist, dass Sie bei Ihrer nächsten Version Ihren Schlüssel ändern und ein vorab gespeichertes Datum mit dem aktuellen Arbeitsformat senden und dann dem Benutzer erlauben, es zu ändern. –

Antwort

1

Sie Verwenden Sie erzwungene Unwrapping zum Auspacken, aber nicht sicher dateFromString Funktion Rückgabewert! = Nil, es ist Fall Raise-Ausnahme.

Trying to use ! to access a nonexistent optional value triggers a runtime error. Always make sure that an optional contains a non-nil value before using ! to force-unwrap its value.

Sie können nicht sicherstellen, userDefault.objectForKey("day") speichert immer String des Tages jederzeit. Und Ihre Speicher-String wird mit Format? "yyyy-MM-dd HH:mm:ss"

Sie besser unwrap Verwendung optional Bindung, um sicherzustellen, sind die Daten nicht gleich Null oder gültiges Format

if let day = userDefault.objectForKey("day") as? String { 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
    if let date = dateFormatter.dateFromString(day) { 
     // convert success 
     print(date) 
    } 
} 
+0

Funktioniert perfekt danke – Khoury