URLSession.shared.dataTask retour zéro octets

voix
0

Mon but est d'appeler un service http qui retourne un JSON être analysé comme un tableau d'objets NewsModel.

Je définissais une struct comme ça

struct NewsModel: Decodable {
    var id: Int
    var title: String
    var content: String
} 

et écrit cette méthode dans Service.swift classe:

func getNews(pageSize: Int, pageCount: Int, completion: @escaping ([NewsModel]?) -> ()) {

        guard let url = URL(string: \(Service.baseURLSSMService)/news?pageSize=\(pageSize)&pageCount=\(pageCount)) else {return}

        var retVal = [NewsModel]()

        // Create URLRequest
        var request = URLRequest(url: url)
        // Set headers and http method
        request.httpMethod = GET
        request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
        request.setValue(application/json; charset=utf-8, forHTTPHeaderField: Content-Type)

        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            guard let dataResponse = data,
                error == nil else {
                    print(error?.localizedDescription ?? Response Error)
                    completion(nil)
                    return }
            do{                
                    print(RESPONSE:\(response.debugDescription))
                    retVal = try
                        JSONDecoder().decode([NewsModel].self, from: dataResponse)
                    completion(retVal)

            } catch let parsingError {
                print(Error, parsingError)
                completion(nil)
            }

        }
        task.resume()
    }

Je dois appeler cette méthode de mon HomeViewController . J'ai utilisé ce code dans mon viewDidLoad:

Service.sharedInstance.getNews(pageSize: 10, pageCount: 1) { (news) in

            // I need the first element of the news array   
            // I save it into a global variable 
            self.homeNews = news?.first

            DispatchQueue.main.async {
                if self.homeNews != nil {
                    self.myLabel.text = self.homeNews?.title
                }
                else {
                    self.myLabel.text = No data received.    
                }
            }
        }

Quand je lance le code, il arrive toujours que la fonction getNews retourne 0 octets si rien ne peut être analysé par le JSONDecoder. Tel est le message d'erreur:

Erreur dataCorrupted (Swift.DecodingError.Context (codingPath: [], debugDescription: Les données annoncées n'était pas valide JSON., UnderlyingError: Pas de valeur en option (erreur Domain = code NSCocoaErrorDomain = 3840 UserInfo = {NSDebugDescription = Aucune valeur .})))

Si je l'appelle deux fois la dernière fois que les valeurs propres sont reçues. Qu'est-ce que je fais mal? Parce que je suppose que je fais quelque chose de mal, mais je ne peux pas l'obtenir.

EDIT 1 :

Voici un exemple de JSON:

[
  {
    id: 2048,
    title: title-sample-1,
    content: content-sample-1
  },
  {
    id: 2047,
    title: title-sample-2,
    content: content-sample-2
  }
]

EDIT 2 :

Voici le response.debugDescription

RESPONSE:Optional(<NSHTTPURLResponse: 0x2830a1160> { URL: http://.../news?pageSize=1&pageCount=1 } { Status Code: 400, Headers {
    Connection =     (
        close
    );
    Date =     (
        Tue, 27 Nov 2018 15:38:38 GMT
    );
    Transfer-Encoding =     (
        Identity
    ); } })
Créé 27/11/2018 à 15:09
source utilisateur
Dans d'autres langues...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more