1

Я пытаюсь получить результаты функции get() в tableview. результат внутри этой функции исходит из сообщения Http. Поэтому я использую nsmutableurl и т. Д. Я получаю данные, которые можно увидеть в моей выходной консоли, и теперь хочу, чтобы это было на моем столе. Как я могу это сделать?Swift: Как заполнить UITableView

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

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 && 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 

    } 

ответ

0

Поскольку вы не предоставляет какой-либо информации о вашем результате запроса 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 

} 

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

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

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

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

enter image description here

Смежные вопросы