2016-11-23 6 views
0

У меня есть запрос и анализ ответов json коды, но мои коды не работают.Swift 3 запрос сообщение, ответ возвращается nil

Мой класс коды

@discardableResult 
    open func getLoginMethod(_ method: String, parameters: String, completionHandler: @escaping (_ login: [Login]?, _ error: Error?) -> Void) -> URLSessionTask! { 
     let session = URLSession.shared 
     guard let url = NSURL(string: parameters) else { 
      completionHandler(nil, myErrors.InvalidUrlError) 
      return nil 
     } 

     let request = NSMutableURLRequest(url: url as URL) 
     request.httpMethod = "POST" 
     let sendingdata = "Simple=1" 
     request.httpBody = sendingdata.data(using: String.Encoding.utf8); 

     let task = session.dataTask(with: request as URLRequest) { data, response, error in 

      if error != nil { 
       completionHandler(nil, myErrors.getError) 
      } else { 
       do { 
        let login = try self.getLogin(jsonData: data! as NSData) 

        print(login) 

        completionHandler(login, nil) 
       } catch { 
        completionHandler(nil, error) 
       } 
      } 
     } 
     task.resume() 

     return task 
    } 

И когда я нажимаю на кнопку действия, что коды дает мне только

ноль

выход. Где я делаю ошибку?

+0

@Vinodh Да, конечно модели коды верно. Я думаю, ошибка на request.httpBody = отправка data.data (с использованием: String.Encoding.utf8); или если jsonArray = попробуйте JSONSerialization.jsonObject (с помощью: jsonData as Data, options: .allowFragments) как? [String: AnyObject] { – SwiftDeveloper

+0

@ Vinodh также я добавил модель входа – SwiftDeveloper

+0

@ Vinodh nope все еще такой же – SwiftDeveloper

ответ

1

Пожалуйста найти код ниже я использую, который работает нормально с местным son.Since вы не предоставили URL-адрес и другие детали

if let file = Bundle.main.path(forResource: "response", ofType: "json") { 
       do { 
        let jsonData = try Data(contentsOf: URL(fileURLWithPath: file)) 
        let login = try self.getLogin(rawData: jsonData) 

        let arr = login.first 

        if let date = arr?.ServerCurrentDate { 

         print("Comming Date = \(date)") 


        } 

       } 
       catch{ 
        print(error) 
       } 
      } 


private func getLogin(rawData: Data) throws -> [Login] { 
     var login = [Login]() 

     do { 
      if let jsonDict = try JSONSerialization.jsonObject(with: rawData, options: .allowFragments) as? [String: AnyObject] { 
       print(jsonDict) 
       if let result = jsonDict["Result"] as? [String : AnyObject] 
       { 
        var properties = [String: AnyObject]() 
        properties["IsSuccess"] = result["IsSuccess"] as? Bool as AnyObject? 
        properties["MemberId"] = result["MemberId"] as? Int as AnyObject? 
        properties["Name"] = result["Name"] as? String as AnyObject? 
        properties["Image"] = result["Image"] as? String as AnyObject? 
        properties["FacebookId"] = result["FacebookId"] as? Int as AnyObject? 
        properties["FacebookMail"] = result["FacebookMail"] as? String as AnyObject? 
        properties["Phone"] = result["Phone"] as? String as AnyObject? 
        properties["Code"] = result["Code"] as? String as AnyObject? 
        properties["Token"] = result["Token"] as? String as AnyObject? 
        properties["ServerCurrentDate"] = result["ServerCurrentDate"] as? String as AnyObject? 
        let loginget = Login(properties: properties) 
        login.append(loginget) 
       } 

      } 
     } catch { 
      print(error) 
     } 
     return login 
    } 

и мой локальный файл JSON

response.json

{ 
    "Result": { 
     "IsSuccess": true, 
     "MemberId": 73, 
     "Name": "X4r-7a", 
     "Image": "MemberImage/48a25240-26a9-46bf-8eb5-72a6b86ad555.png", 
     "FacebookId": null, 
     "FacebookMail": null, 
     "Phone": "0111111112", 
     "Code": "5425", 
     "Token": "570f4112-0f37-4e23-a2d7-5dad6af9378a", 
     "ServerCurrentDate": "2016-11-23-10-41-32" 
    } 
} 
+0

@ Vinodth ty человек пожалуйста, одобрите изменение. ваши коды работают с реальным json-файлом, но у меня проблема с сервером, я думаю. – SwiftDeveloper

+0

Ты только мне дал этот ответ, поэтому я его использовал. – Vinodh

2

Ваши значения один шаг глубже в структуре JSon:

... 

if let result = jsonDict["Result"] as? [String : AnyObject] 
{ 
    properties[LoginJsonKeys.Name] = result["Name"] as? String 
} 
... 

надежда, что помогает

+0

Да, правда, я добавил его в мои коды классов, как вы показываете, но при этом результат дает ноль. – SwiftDeveloper