2016-10-17 203 views
0

我的新應用程序出現問題。我必須使用XmlToDictionary來獲取並解析WebService中的一個大XML,以使所有操作更簡單。 當我嘗試構建我的應用程序時,如果我查看任務管理器,這是一個耗費我所有RAM的任務(「SourceKit」)。 在互聯網上搜索我認爲我明白了這個問題:我的解析的結果是一大排NSDictionary「不明確」類型。Xcode,大量的NsDictionary消耗我所有的RAM

所以我的問題是:你知道另一種方式來管理這個NSDictionary數組嗎?或者顯式聲明這個數組的方法?或者任何其他方式? 這是我的代碼:

//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

如果您使用的內存比預期的多,請查看autorelease池。使用不同的XML解析器,如果沒有幫助,它不會一次解析所有內容。 – gnasher729

+0

我發現問題是字典的創建,而不是解析器......但它很奇怪 – Leonardo

回答

0

我自己解決了這個問題,這個問題是宣言的OD的NSDictionary:如果我有兩種NSDictionary中它的工作原理把它分解。 我認爲這是編譯器的錯誤。