Метод сообщения NSArray показывает результаты в формате json, но я не могу показать значение в табличном представлении (Swift 5) - PullRequest
0 голосов
/ 23 октября 2019

Я использую метод post для отображения данных в табличном представлении. Я получил свой ответ JSON. Но я не могу показать данные моего массива в табличном представлении, только видимое значение nil и область отладки также показывают это значение = ["fav": <__ NSArrayM 0x600000352370> ()] Как получить данные моего массива? В чем ошибка в моем коде?

func getjsonData()  {       
    let parameters = ["userid": 1, "start": "0"] as [String : Any]

        //create the url with URL
        let url = URL(string: "https://test.php")! //change the url

        //create the session object
        let session = URLSession.shared

        //now create the URLRequest object using the url object
        var request = URLRequest(url: url)
        request.httpMethod = "POST" //set http method as POST

        do {
            request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) // pass dictionary to nsdata object and set it as request body
        } catch let error {
            print(error.localizedDescription)
        }

        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")

        //create dataTask using the session object to send data to the server
        let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

            guard error == nil else {
                return
            }

            guard let data = data else {
                return
            }

            do {
                //create json object from data
                if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
                    print ("data = \(json)")

                    if let arry = json["pnbu"] as? [[String:Any]] {
                    for dic in arry {
                        let buzzyuser_id = dic["buzzyuser_id"]
                        let buzzyuser_location = dic["buzzyuser_location"]
                        let buzzyuser_image = dic["buzzyuser_image"]
                        self.favs.append(JsonResponse(buzzyuser_id: buzzyuser_id as? String, buzzyuser_location: buzzyuser_location as? String, buzzyuser_image: buzzyuser_image as? String))
                        print(buzzyuser_id!)
                        DispatchQueue.main.async { // Correct
                            self.TableSectionView.reloadData()                            }

                    }
                    }


                }
            } catch let error {
                print(error.localizedDescription)
            }

        })
        task.resume()

}

показать список массивов в области отладки, но мои данные не могут ответить в моем виде таблицы. после запуска потока 1 симулятора ошибка в области отладки ... но код метода get будет работать нормально.

1 Ответ

0 голосов
/ 23 октября 2019

Чтобы придумать этот ответ, я сделал некоторые предположения относительно остальной части приложения, поскольку эта деталь не была предоставлена. К ним относятся:

  1. предоставленный код существует как часть контроллера представления
  2. , что контроллер представления имеет массив с именем favs, который используется для заполнения массива
  3. код для генерации tableView работает правильно
  4. , что, как вы сделаете вывод в Q, что синтаксический анализ и приведение json работает правильно, и возвращает массив arry

эти предостережения я бы реструктурировал ваш код по этим направлениям, чтобы убедиться, что контроллер представления имеет полный набор данных до вызова .reloadData()

//replacing for loop in example code above
let results = [JsonResponse]()
for dic in arry {
  let buzzyuser_id = dic["buzzyuser_id"]
  let buzzyuser_location = dic["buzzyuser_location"]
  let buzzyuser_image = dic["buzzyuser_image"]
  results.append(JsonResponse(buzzyuser_id: buzzyuser_id as? String,
             buzzyuser_location: buzzyuser_location as? String, 
             buzzyuser_image: buzzyuser_image as? String))
}
DispatchQueue.main.async {
   self.favs = results
   self.tableView.reloadData()
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...