2017-08-31 1 views
0

Mon problème est que j'ai la fonction getData() sur le ViewDidLoad() et quand je passe à une autre vue et retourne à cette vue, elle charge de nouveau les données qui dupliquent mes données sur la tableView.Duplication des données lors de l'extraction de la fonction JSON appelée

var items = [Items]() 

func getData() { 
     Alamofire.request(url, method: .get).validate().responseJSON { response in 
      self.obj.helper.checkConnectivity() 

      switch response.result { 
      case .success(let value): 
       let json = JSON(value) 

       let jsonArray = json[].arrayValue 
       for json in jsonArray { 

        let item = Items.fromJson(json: json) 
        self.items.append(item) 
       } 

      case .failure(let error): 
       print(error) 
      } 
      self.tableView.reloadData() 
     } 
    } 



struct Items { 
    var id: Int 
    var name: String 

    static func fromJson(json: JSON) -> Items { 
     return Items(
      id: json["id"].intValue, 
      name: json["name"].stringValue, 
    } 
} 
+0

Cela dépend. Pourquoi appelez-vous encore? Vous demandez à nouveau les mêmes données, non? Alors évitez de l'appeler à nouveau? Ou cherchez-vous une API paginée? – Larme

+0

@Larme J'appelle getData() sur ViewDidLoad() donc je l'appelle une seule fois sur ViewController. –

+0

pourquoi rechargez-vous la page? Si elle est chargée et que vous naviguez vers une autre page, puis que vous retournez, vous devriez juste obtenir viewDidAppear - êtes-vous en train de forcer un déchargement de la vue dans le cadre de votre navigation? Si vous avez besoin de décharger la page, vous devez supprimer toutes les données dans le cadre du déchargement - s'il est valide pour conserver les données du formulaire, vous ne devriez pas supprimer le formulaire ... – Russell

Répondre

1

Il suffit d'insérer une ligne pour effacer le tableau:

... 
      let jsonArray = json[].arrayValue 
      self.items.removeAll() 
      for json in jsonArray { 
... 

ou remplacer

  for json in jsonArray { 
       let item = Items.fromJson(json: json) 
       self.items.append(item) 
      } 

avec

  self.items = jsonArray.map { Items.fromJson(json: $0) } 
+0

Thanks fonctionne avec "self.items = jsonArray.map {Items.fromJson (json: $ 0)} " –