2017-09-03 1 views
0

J'ai le code sans erreur suivant et ne semble pas utiliser les informations fournies pour mon tableau de résultats. Après avoir joué, je peux imprimer chaque emplacement d'entreprise indiqué, mais je ne peux pas ajouter/utiliser le tableau destiné à contenir cette information. Je ne comprends pas pourquoi chaque emplacement s'imprime mais mon tableau apparaît vide.La requête API Google Places renvoie un tableau vide mais imprime toutes les réponses - aucune erreur

Je présente mes excuses pour l'ensemble de mon code, mais j'ai passé des heures à essayer de corriger mon problème ...

import UIKit 
import GooglePlaces 

class FoodTwo: UITableViewController { 

var placesClient: GMSPlacesClient! 

let international: [String] = ["ChIJAQDABX7CIogRIEY3k6r7R-g", 
"ChIJqX3q1IbCIogRFcuI05IPNDU", 
"ChIJAQDABX7CIogRY2MA6XVas8E"] 

let american: [String] = ["ChIJkX9tTSvoIogROXkxd0gpg3s", "ChIJy7lUZCfoIogRVBuB9jWKHUk", "ChIJyzCZMiroIogRkuMavnKsA0w", "ChIJbYvWJ5jCIogRxh0VQA_yD0I", "ChIJa4Sks23CIogRpRod4v5GEN8", "ChIJxVpGsNbpIogRG5HIAKbNyDU", "ChIJ1W32UyvoIogRyp_Rdxn6f8I", "ChIJwTht4ifoIogRsuXdEOrKGMk", "ChIJ6UXEgNPpIogR4Q3ZAAWQQSI", "ChIJUZVAjdTpIogRpyca26a6D8o",     "ChIJ6-h6_EctIIgRO1kypozaGGs", "ChIJK8NGam7CIogRlzU1TKeSjVI", "ChIJ7Xxh1m3CIogRZ_yabslUzd8", "ChIJ_dxSGJ7CIogRcYwJhjAm7TQ"] 

// more arrays here - deleted to reduce scrolling// 

var results = [GMSPlace]() 

var index: IndexPath! 

override func viewDidLoad() { 
    super.viewDidLoad() 

placesClient = GMSPlacesClient.shared() 
    var place: [String] 

    switch index.row 
    { 
    case 0 : 
     place = international 
    case 1 : 
     place = american 
    case 2 : 
     place = asian 
    case 3 : 
     place = bakery 
    case 4 : 
     place = bar 
    case 5 : 
     place = indian 
    case 6 : 
     place = italian 
    default : 
     place = mexican 
    } 
    for id in place 
    { 
     placesClient.lookUpPlaceID(id, callback: { (result, error) -> Void in 

      if let error = error { 
       print("lookup place id query error: \(error.localizedDescription)") 
       return 
      } 

      guard let result = result 
      else 
      { 
      print("No place details for \(id)") 
      return 
      } 
     self.results.append(result) 

     }) 
     OperationQueue.main.addOperation({() -> Void in 
      self.tableView.reloadData() 
       }) 

     } 
} 

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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "FCT") as! FoodCellTwo 

    let each = results[indexPath.row] 
    cell.nameLabel.text = each.name 

    return cell 
} 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 
} 

Répondre

1

placesClient.lookUpPlaceID est une fonction asynchrone. Vous devez attendre jusqu'à ce qu'il se termine. Ainsi, vous rechargez virtuellement la vue de table avant le tableau se remplit.

Vous devez recharger la vue de table après le tableau a été rempli.

for id in place { 
    placesClient.lookUpPlaceID(id) { result, error in 
     if let error = error { 
      print("lookup place id query error: \(error.localizedDescription)") 
      return 
     } 

     guard let result = result else { 
      print("No place details for \(id)") 
      return 
     } 

     self.results.append(result) 

     if place.count == self.results.count { 
      self.tableView.reloadData() 
     } 
    } 
} 
+0

Une autre parenthèse fermante était nécessaire], mais c'était la réponse! – jonpeter