2016-10-17 1 views
0

J'ai un problème avec ma nouvelle application. Je dois obtenir et analyser un grand xml d'un WebService, en utilisant XmlToDictionary pour rendre tout plus facile. Lorsque j'essaie de créer mon application, si je regarde dans le gestionnaire de tâches, c'est une tâche ("SourceKit") qui consomme toute ma RAM. Recherche sur internet je pense que j'ai compris le problème: Le résultat de mon analyse est un grand tableau de NSDictionary avec "non explicitement" type. Donc, ma question est: savez-vous une autre façon de gérer ce tableau de NSDictionary? Ou une méthode pour déclarer explicitement ce tableau? ou d'une autre manière? Ceci est mon code:Xcode, un grand choix de NsDictionary consomme toute ma RAM

//The block of the HTTP connection for get the xml form the WebService. 
    operation.setCompletionBlockWithSuccess({ (operation, response) -> Void in 

      parser = response as? XMLParser 
      let XmlPars = XmlParsing() 
      XmlPars.parsing(parser: parser!) 



      }, failure: { (operation, error) -> Void in 
       print(error.localizedDescription) 
     }) 
     operation.start() 

    func parsing (parser : XmlParser){ 
    let xmlStruttureTipi = (dictionary["StruttureTipi"] as! NSDictionary) 
     let struttureTipi = (xmlStruttureTipi[xmlStruttureTipi.allKeys[0]] as! Array<NSDictionary>) 
     parseStruttureTipi(struttureTipi: struttureTipi) 
    } 

    func parseStrutture { 

func parseStrutture(strutture : [NSDictionary]) { 

     let formatter = DateFormatter() 
     var ArrayStrutture = [Struttura]() 
     for struttura in strutture{ 
      let s = Struttura() 

      formatter.dateFormat = "dd-MM-yyyy" 
      let data = formatter.date(from: struttura["DataAggiornamento"] as! String)! 

      if(struttura["DataAggiornamento"] != nil){s.DataAggiornamento = data}else{s.DataAggiornamento = formatter.date(from: "00-00-0000")} 


      if(struttura["Longitudine"] != nil){s.Longitudine = Double((struttura["Longitudine"] as? String)!)}else{s.Longitudine = 0.0} 

      if(struttura["Latitudine"] != nil){s.Latitudine = Double((struttura["Latitudine"] as? String)!)}else{s.Latitudine = 0.0} 

      if(struttura["Nome"] != nil) 
      {s.Nome = struttura["Nome"] as? String} 
      else{s.Nome = ""} 

//A lot other proprety... 

      ArrayStrutture.append(s) 
     } 

     let repoStrutture = RepoStruture() 
     repoStrutture.insertStrutture(strutture: ArrayStrutture) 

    } 

} 
+0

Regardez les pools de libération automatique si vous utilisez plus de mémoire que prévu. Utilisez un analyseur XML différent qui n'analyse pas tout en une fois si cela ne vous aide pas. – gnasher729

+0

J'ai découvert que le problème est la création du dictionnaire, pas l'analyseur ... mais c'est tellement étrange – Leonardo

Répondre

0

je résolu le problème par moi-même, le problème était la déclaration du The NSDictionary: si je le diviser en deux NSDictionary cela fonctionne. Je pense que c'est un bug du compilateur.