Swift: как заполнить UITableView

#swift #xcode #uitableview #nsmutabledictionary #tableviewcell

#swift #xcode #uitableview #nsmutabledictionary #tableviewcell

Вопрос:

Я пытаюсь получить результаты от функции get() в tableview. результат внутри этой функции поступает из Http post. Итак, я использую nsmutableurl и т.д. я получаю данные, которые n может видеть в моей консоли вывода, и теперь хочу, чтобы они были в моем tableview. как я могу это сделать?

У меня есть эта куча кода, мне удалось получить данные (можно увидеть в моей консоли вывода), и теперь я пытаюсь загрузить эти данные в табличное представление. Как я могу передать эти данные внутри таблицы?

     func get(){

        let request = NSMutableURLRequest(URL: NSURL(string: "http://myurl/somefile.php")!)
        request.HTTPMethod = "POST"
        let postString = "id=(cate_Id)"
        request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in

            guard error == nil amp;amp; data != nil else {                                                          // check for fundamental networking error
                print("error=(error)")
                return
            }

            if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {           // check for http errors
                print("statusCode should be 200, but is (httpStatus.statusCode)")
                print("response = (response)")
            }

            let responseString = String(data: data!, encoding: NSUTF8StringEncoding)
            print("responseString = (responseString)")
        }
        task.resume()
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        i need the count of the rows here
    }



    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        land want to display the data inside each cell

    }
 

Ответ №1:

Поскольку вы не предоставляете никакой информации о результате вашего HTTP-запроса, я пытаюсь ответить вам «в общих чертах».

В общем случае вы получаете ответ в виде массива словарей нужных вам данных. Чтобы упростить задачу: допустим, вы запрашиваете строки, тогда вы должны сделать это следующим образом:

 let myStringArray: [String] = []
 

В вашем блоке ответа HTTP вы принимаете свой ответ и, пожалуйста, будьте осторожны! Этот код полностью зависит от ВАШЕГО дерева ответов. Я понятия не имею, каков ваш ответ, поскольку вы его не предоставили.

         if let JSON = response.result.value {

            let myString = String((JSON.valueForKey("stringWithinMyResonseTree"))!)
            myStringArray.append(myString)

            self.tableView.reloadData()
        }
 

Тогда у вас есть количество строк с:

 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return myStringArray.count
}
 

В ячейке это зависит от того, что вы хотите с ней сделать. Если у вас есть, например, метка в вашей ячейке и вы хотите отобразить в ней значение вашей строки, вы должны создать UITableViewCell подкласс и вызвать его, например MyCell . В MyCell вы создаете выход вашего ярлыка следующим образом:

 class MyCell: UITableViewCell {

    @IBOutlet weak var myLabel: UILabel!
 

Затем вам нужно вернуть свой UITableView подкласс и заполнить метку нужной строкой.

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("MyCell") as! MyCell
        let string = myStringArray[indexPath.row]
        cell.myLabel.text = string

        return cell

}
 

Не забудьте установить идентификатор ячейки в свойствах конструктора интерфейса.

Ваш запрос ожидает массив из одного словаря, но вы приводите его в виде строки. Поэтому вместо вашей get() функции, пожалуйста, используйте следующее:

 func download() {
    let requestURL: NSURL = NSURL(string: "http://myurl/somefile.php")!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(urlRequest) {
        (data, response, error) -> Void in

        let httpResponse = response as! NSHTTPURLResponse
        let statusCode = httpResponse.statusCode

        if (statusCode == 200) {
            print("Everyone is fine, file downloaded successfully.")

            do{

                let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)

                let grouID = String(json.valueForKey("group_id"))
                let name = String(json.valueForKey("NAME"))

                print("grouID = (grouID)")
                print("name = (name)")
                print("debug: this code is executed")

            }catch {
                print("Error with Json: (error)")
            }

        }
    }

    task.resume()
}
 

Для отладки ваших проблем, пожалуйста, создайте точку останова исключения:

введите описание изображения здесь