2017-08-18 2 views
1

Je suis assez nouveau avec la gestion des requêtes et des réponses dans swift .. C'est le code avec lequel je suis coincé. J'obtiens la valeur du webservice dans dataArray mais ne charge pas dans la tableview. S'il vous plaît quelqu'un d'aide.Je ne reçois pas de données dans UITableView du service Web

import UIKit 
import Foundation 
import Alamofire 
import SwiftyJSON 

class AddOnsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet weak var tableView: UITableView! 

    var dataArray = [AnyObject]() 
    var addOnsURL = "http://econstrademosite.com/food_delivery/?****************" 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.automaticallyAdjustsScrollViewInsets = false 
     self.tableView.reloadData() 
     callData() 
    } 

    @IBAction func goBackToHome(sender: UIBarButtonItem){ 

     let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "base") as! SWRevealViewController 
     self.present(vc, animated: true, completion: nil) 
    } 

    func callData(){ 

     Alamofire.request(addOnsURL).responseJSON { response in 

      let result = response.result 
      if let dict = result.value as? Dictionary<String, AnyObject>{ 
       if let innerDict = dict["data"]?["result"]{ 
        self.dataArray = innerDict as! [AnyObject] 
        print(self.dataArray) 
       } 
      } 
     } 
    } 

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

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! exampleTableViewCell 
     let itemName = dataArray[indexPath.row]["item_name"] 
     cell.label.text! = itemName as! String 

     return cell 
    } 

} 
+2

je pense que u besoin de recharger la vue de la table dans la clôture de votre demande. – koropok

+0

@koropok vous avez raison –

+0

oui .. Merci beaucoup .. cela a fonctionné .. nécessaire de recharger dans la demande de fermeture .. –

Répondre

2
func callData(){ 

     Alamofire.request(addOnsURL).responseJSON { response in 

      let result = response.result 
      if let dict = result.value as? Dictionary<String, AnyObject>{ 
       if let innerDict = dict["data"]?["result"]{ 
        self.dataArray = innerDict as! [AnyObject] 
        print(self.dataArray) 
       if self.dataArray.count > 0 
        { 
        self.tableView.reloadData() 
        } 
       } 
      } 
     } 
    } 
1

Ne pas oublier d'ajouter delegate et dataSource pour votre tableView

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.automaticallyAdjustsScrollViewInsets = false 
     self.tableView.delegate = self 
     self.tableView.dataSource = self 
     callData() 
    } 

puis recharger tableView après que les données ont été extraites:

func callData(){ 

    Alamofire.request(addOnsURL).responseJSON { response in 

     let result = response.result 
     if let dict = result.value as? Dictionary<String, AnyObject>{ 
      if let innerDict = dict["data"]?["result"]{ 
       self.dataArray = innerDict as! [AnyObject] 
       print(self.dataArray) 
       self.tableView.reloadData() // you missing this method 
      } 
     } 
    } 
} 
+1

J'ai déjà ajouté délégué et datasource à la vue .. et merci cela a fonctionné .. J'utilisais la méthode de rechargement au mauvais endroit. –

0

Vous devez changer votre appel à tableview.reloadData(). Dès que la réponse arrive après api appel et vous stockez la réponse dans dataArray, vous pouvez recharger la table.

Il est donc inutile de recharger le viewview dans viewDidLoad() dans votre cas car votre dataArray est vide.

Alors s'il vous plaît changer la méthode callData() comme celui-ci

func callData(){ 

    Alamofire.request(addOnsURL).responseJSON { response in 

     let result = response.result 
     if let dict = result.value as? Dictionary<String, AnyObject>{ 
      if let innerDict = dict["data"]?["result"]{ 
       self.dataArray = innerDict as! [AnyObject] 
       print(self.dataArray) 
      } 
     } 
    } 
}