почему мой JSON возвращается ноль - PullRequest
0 голосов
/ 11 июня 2018
    let myUrl = URL(string: "http://app.avatejaratsaba1.com/api/Values/GetPriceList?paymentType=1&goodType=102")
    var request = URLRequest(url: myUrl!)
    request.httpMethod = "GET" // compose a query string
    request.addValue("application/json", forHTTPHeaderField: "content-type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")


    let task = URLSession.shared.dataTask(with: request)
    {
        (data : Data? , response : URLResponse? , error : Error?) in

        self.removeActivtyIndicator(activityIndicator: MyActivityIndicator)

        if error != nil
        {
            self.DisplayMessage(UserMessage: "2Could not successfully perform this request , please try again later.")
            print("error = \(String(describing : error))")

        }
        // let's convert response sent from a server side code to a NSDictionary object:

        do { let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
            if let parseJSON = json
            {

У меня есть точный код в другом viewcontroller с другим URL, и он работает правильно !!!он работает должным образом в Почтальоне !!

, и я пишу swift

ОБНОВЛЕНО ::::

do {
            if let json = try JSONSerialization.jsonObject(with: data) as? [[String:Any]] {
                var goodNameArray = [String].self
                for i in 0..<json.count{
                    guard let goodName = json[i]["goodName"] as? String else{return}
                    Global.GlobalVariable.GoodName = goodNameArray.append(goodName)
                }
                print("GoodNames: \(goodNameArray)")
            }
        } catch let parseError {
            print("parsing error: \(parseError)")
            let responseString = String(data: data, encoding: .utf8)
            print("raw response: \(String(describing: responseString))")
        }
    }
    task.resume()

, и ошибка, которую он возвращает:

Невозможно вызвать 'append' со списком аргументов типа '(String)'

код глобальной переменной :::::

class Global: UIViewController

{

struct GlobalVariable
{
    static var companyName = "Company"
    static var bigName = ((0) , (""))
    static var names  = ["Loading..." , ""]
////////////
    static var AgentInfo = "agentinfo"
////////////
    static var genaral_goodID = 000
    static var GoodName = [String]()
    static var PriceVariableName = "PriceVariableName"
    static var paymentType = "paymentType"
    static var fee = "fee"
    static var exipreDate = "exipreDate"
    static var expireTime = "expireTime"


}

}

ОБНОВЛЕНО ::::::

uitable

class secondtable : TableViewController
{

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return Global.GlobalVariable.names.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = UITableViewCell()
        let content = Global.GlobalVariable.GoodName[indexPath.row]
        cell.textLabel?.text = content
        //cell.accessoryType = .disclosureIndicator


        return cell

    }

} здесь, в этом разделе моего кода, я должензаполнить таблицу "goodName"

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Сделайте себе одолжение и сэкономьте время, читая протокол Codable.Это позволит вам генерировать довольно приличный JSON-парсер, просто определяя вашу структуру.Использование JSONDecoder.decode предоставит вам гораздо более ценную информацию об ошибках, если что-то пойдет не так.

Поскольку ваш API в настоящее время предоставляет только пустой массив с использованием URL-адреса, который вы нам предоставляете, довольно сложно придумать какой-либозначимый код.Вам следует прибегнуть к простому String-представлению вашего JSON, по крайней мере, к минимизированной форме, которая показывает нам все о структуре.Таким образом, ваш вопрос не будет зависеть от работы, вероятно, довольно сложного веб-сервиса.

0 голосов
/ 11 июня 2018

Я тестировал ниже, это работает для меня. Ответ в array of dictionaries.Не делайте принудительного развертывания.

 func viewDidLoad(){
      downloadDataFromServer { (success, goodNamesArray) in
                if success{
                    print("goodNamesArray: \(goodNamesArray)")
                    print("successfully updated tableview data")
                    self.tableView.reloadData()
                }
            }
    }
func downloadDataFromServer(completionHandler: @escaping(Bool,[String])->()){
     guard let url = URL(string: "http://app.avatejaratsaba1.com/api/Values/GetPriceList?paymentType=1&goodType=102")  else {
            return
        }
        let request = URLRequest(url: url)

        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data else {
                print("request failed \(String(describing: error))")
                return
            }

            do {
                if let json = try JSONSerialization.jsonObject(with: data) as? [[String:Any]] {
                    var goodNameArray = [String]() 
                    for i in 0..<json.count{
                        guard let goodName = json[i]["goodName"] as? String else{return}
                        self.goodNameArray.append(goodName)
                    }
                    print("GoodNames: \(self.goodNameArray)")
                   Global.GlobalVariable.GoodName = goodNameArray
                }
            } catch let parseError {
                print("parsing error: \(parseError)")
                let responseString = String(data: data, encoding: .utf8)
                print("raw response: \(String(describing: responseString))")
            }
        }
        task.resume()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...