2017-10-18 9 views
0

J'essaie d'utiliser la fonctionnalité Swift 4 codable mais est resté coincé dans cette situation:Swift 4 décodables, DecodingError: Aucune valeur associée à la clé

struct Message:Codable { 

let message: String 
let timestamp: String 
let latitude: String 
let longitude: String} 

Ceci est mon struct.

guard let url = URL(string:"http://localhost:443/api/message") else {return} 
    var request = URLRequest(url: url) 
    request.httpMethod = "POST" 
    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    print("POSTED") 

    let newPost = Message(message: "Hi", timestamp: "1", latitude: "1.1", longitude: "2.2") 

    print("NewPost:",newPost) 

    do { 
     let jsonBody = try JSONEncoder().encode(newPost) 
     request.httpBody = jsonBody 

    } catch let err { 
     print("jsonBody Error: ",err) 
    } 

    let session = URLSession.shared 
    let task = session.dataTask(with: request){ (data,response,err) in 
     guard let data = data else {return} 
     do{ 
      let sendPost = try JSONDecoder().decode(Message.self, from: data) 
      print("sendPost:\(sendPost)") 
     }catch let err{ 
      print("Session Error: ",err) 
     } 
    } 
    task.resume() 
} 

Et c'est la fonction que j'utilise pour la demande de publication. Dans la presse écrite ("NewPost:", newPost), il imprime

NewPost: Message(message: "Hi", timestamp: "1", latitude: "1.1", longitude: "2.2") 

qui avaient l'air très identiques à d'autres exemples que j'ai vu, mais il y a toujours une erreur de session par prise

Session Error: keyNotFound(DeadDrop.Message.(CodingKeys in _5C64F74710315F52702B56CE54E28C19).message, Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key message (\"message\").", underlyingError: nil)) 

I juste ne comprends pas comment cela est venu! J'utilise exactement la même structure et il dit qu'il n'y a pas de clé pour ça ?! Merci pour toute aide!

+0

Pouvez-vous poster quelle est votre impression 'data'? –

+0

Cela a à voir avec la façon dont l'objet Message est codé. Pouvez-vous poster le code pour la classe Message? – NSAdi

+0

Si j'utilise print ("DATA: \ (data)") après l'impression ("Session Error:", err), il imprime "DATA: 68 bytes" ... comment puis-je voir ce qu'il y a dedans? @ViniApp – Kei

Répondre

0

SQLState: 22007 : The string representation of a datetime is not in the acceptable range or is not in the correct format.

Comme vous a dit que vous obtenez data comme ci-dessous:

{"code":"ER_TRUNCATED_WRONG_VALUE","errno":1292,"sqlSta‌​te":"#22007"} 

Selon cette link, il attend que différents types de données que vous envoyez.

Je suspecte le timestamp que vous envoyez est 1, et ce n'est pas un timestamp valide.

Essayez d'envoyer la valeur timestamp comme « 1508309342 »

Autre que votre code de décodage est très bien.

+0

Merci! J'ai en fait le format de Time Stamp ('horodatage: 2017-09-10 10: 22: 33'), mais je pensais que cette erreur est due à JSON ne pas être en mesure de décoder. Donc savoir que c'est une erreur du serveur a vraiment aidé! – Kei

+0

Oh attends, désolé mais je viens de remarquer qu'il montre "" Aucune valeur associée au message clé (\ "message \"). "' Alors pourquoi n'accepte-t-il pas mon message plutôt que l'horodatage? Le message n'a pas de limite autre que <280 caractères chaîne. – Kei