2016-10-17 3 views
0

私の新しいアプリケーションに問題があります。 WebServiceから大きなxmlを取得して解析する必要があります。XmlToDictionaryを使用するとすべてが簡単になります。 私のアプリケーションをビルドしようとすると、私はタスクマネージャを見ると、私のすべての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

予想よりも多くのメモリを使用している場合は、自動解放プールを参照してください。一度にすべてを解析しない別のXMLパーサを使用してください。 – gnasher729

+0

問題はパーサではなく辞書の作成であることがわかりました...しかしそれはとても奇妙です – Leonardo

答えて

0

私はこの問題は、NSDictionaryのOD宣言し、自分で問題を解決した:私は2つのNSDictionaryの中でそれを分割する場合はそれが動作します。 私はそれがコンパイラのバグだと思います。

関連する問題