2016-10-17 9 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했다 : 내가이 NSDictionary에 작동에 분할합니다. 나는 그것이 컴파일러의 버그라고 생각한다.