2017-03-30 2 views
0

J'ai donc un tableau dans lequel je vais stocker toutes les données que je reçois de la requête http et les afficher sur tableView mais il semble que tableView (numberOfRowsInSection) ne reconnaisse pas le changement dans le tableau parce que le nombre reste comme 0.Array ne se connecte pas à la méthode tableView (numberOfRowsInSection)

class OrdersViewController: UIViewController { 


    @IBOutlet weak var tableView: UITableView! 

    var arr = [[String: AnyObject]]() 
    var selectedIndex = -1 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     let baseUrl = "my url" 
     let consumer_key = "consumer_key" 
     let consumer_secret = "consumer_key" 
     let url = "\(baseUrl)?consumer_key=\(consumer_key)&consumer_secret=\(consumer_secret)&status=processing" 

     let headers2 = ["Accept": "application/json"] 
     Alamofire.request(url, headers: headers2) 
      .responseJSON { response in 

        self.arr.append(data from request) 

       } 
     } 

     let url2 = "\(baseUrl)?consumer_key=\(consumer_key)&consumer_secret=\(consumer_secret)&status=pending" 
     Alamofire.request(url2, headers: headers2) 
      .responseJSON { response in 

        self.arr.append(data from request) 

        print("arr", self.arr) 
       } 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
     print("after request", self.arr) 
     return self.arr.count 
    } 
} 
and some other codes... 

Je reçois des données de la requête HTTP avec succès et il est mis à jour dans mon appel Alamofire mais « après la demande » continue d'imprimer un tableau vide et je ne suis pas sûr de ce qui se passe ici.

Si quelqu'un peut donner des conseils qui changeront ma façon de penser, cela sera apprécié.

Merci à l'avance.

Répondre

1

Vous devez appeler tableView.reloadData()après en changeant votre propriété self.arr. Le documentation fournit des détails supplémentaires correspondant:

Appelez cette méthode pour recharger toutes les données qui sont utilisées pour construire la table, y compris les cellules, les en-têtes de section et des pieds de page, les tableaux d'index, et ainsi de suite. Pour plus d'efficacité, la vue de table réaffiche uniquement les lignes visibles.

Si vous envisagez de changer votre self.arr propriété dans de nombreux endroits, vous pourriez aussi ajouter un observateur de la propriété lui:

var arr = [[String: AnyObject]]() { 
    didSet { tableView?.reloadData() } 
} 

... donc vous auriez pas besoin de copier et -passer le même code tout autour ;-)

+0

Je mets self.tableView.reloadData() après append, mais il ne fonctionne toujours pas à jour mon tableau dans Fonction numberOfRowsInSection. En outre, maintenant il me donne une erreur disant "Échec d'assertion dans - [UITableView _configureCellForDisplay: forIndexPath:]" et "Terminant l'application due à l'exception uncaught 'NSInternalInconsistencyException", raison:' UITableView ( ckim16

+1

@ ckim16 Vous êtes les bienvenus! On dirait que vous pourriez avoir un autre problème, mais ne pas appeler' reloadData() 'était définitivement –

0

Je vous recommande de déplacer votre demande et la logique de réponse dans une fonction, puis appelez cette fonction de viewDidAppear au lieu de viewDidLoad et juste après que l'appel recharger votre ta bleview utilisant reloadData()

0

utiliser ce code à l'intérieur du viewDidLoad

dispatch_async(dispatch_get_main_queue()) { 
self.tableView.reloadData() 
} 

au lieu de

tableView.reloadData() 
+0

Ceci affiche toujours un tableau vide pour ma fonction numberOfRowInSection – ckim16

+0

Vérifiez que les valeurs Array de votre console s'affichent sous forme de chaîne.Avec vos valeurs affichées dans la chaîne, votre tableau est vide.Vous devez convertir la chaîne en tableau. la valeur de votre tableau ne montre pas le vide.Tout problème sera là pouvez-vous me montrer la sortie de la console? –