代码之家  ›  专栏  ›  技术社区  ›  cicaletto79

URLSession。共享。dataTask返回零字节

  •  0
  • cicaletto79  · 技术社区  · 7 年前

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

    并在 类别:

    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()
        }
    

    HomeViewController . 我在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."    
                    }
                }
            }
    

    错误数据损坏(Swift.DecodingError.Context(编码路径:[], debugDescription:“给定的数据不是有效的JSON。”,

    如果我在上次收到正确值时调用它两次。我做错了什么?因为我想我做错了什么,但我无法理解。

    编辑1 :

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

    编辑2 :

    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
        ); } })
    
    0 回复  |  直到 7 年前
    推荐文章