2017-05-04 7 views
0

Ich bin wirklich nicht sicher, warum die JSON-Analyse einen SIGABRT-Fehler verursacht.Spielplatz Ausführungsfehler: Signal SIGABRT beim Analysieren von JSON Zeichenfolge

class Bug { 
    enum State { 
     case open 
     case closed 
    } 

    let state: State 
    let timestamp: Date 
    let comment: String 

    init(state: State, timestamp: Date, comment: String) { 
     self.state = state 
     self.timestamp = timestamp 
     self.comment = comment 
    } 

    init(jsonString: String) throws { 

     let dict = convertToDictionary(from: jsonString) 

Ich denke, das ist es, was den Fehler verursacht, aber ich konnte nicht herausfinden, warum:

 self.state = dict["state"] as! Bug.State 

     self.comment = dict["comment"] as! String 

     self.timestamp = dict["timestamp"] as! Date 
    } 
} 

JSON String-Wörterbuch:

func convertToDictionary(from text: String) -> [String: Any] { 
    guard let data = text.data(using: .utf8) else { return [:] } 
    let anyResult: Any? = try? JSONSerialization.jsonObject(with: data, options: []) 
    return anyResult as? [String: Any] ?? [:] 
} 

enum TimeRange { 
    case pastDay 
    case pastWeek 
    case pastMonth 
} 

Fehlerbild: enter image description here

Antwort

2

Diese Zeile scheint ein Problem zu sein:

self.state = dict["state"] as! Bug.State

Bug.State ist eine eigene Art von enum. Aber der Wert in dict["state"] ist ein String. von as! verwenden Sie den Compiler zu sagen, dass Sie wissen dass ein Bug.State zur Laufzeit sein wird, aber wenn das System aussieht, während die App läuft es findet heraus, dass es ein String ist, das ist nicht ein Bug.State so wirft es ein Ausnahme.

Ähnlich in der Zeile, die den Zeitstempel festlegt, den Sie versuchen, zu konvertieren, was wahrscheinlich ein String ist, in ein Datum, das geraden Casting verwendet. Sie müssen einen NSDateFormatter verwenden, um das Datum aus der Zeichenfolge zu extrahieren, um diesen Wert in einen String zu konvertieren.

+0

Ok, welche Änderungen sollte ich machen, um das zu lösen? –

+0

Ich würde Ihrer Enumeration einen Konstruktor hinzufügen, der eine Zeichenfolge akzeptiert und einen ordnungsgemäß erstellten Enumerationswert zurückgibt. Dann könntest du sowas wie 'self.state = Bug.State (fromString: dict [" state "])' –

+0

nennen. Ich denke nicht, dass das das Problem ist. Alle drei self.xxx-Anweisungen verursachen diesen Fehler. –

Verwandte Themen