2011-02-11 12 views
1

次の形式のXMLファイルを解析しています。NSDictionaryにNSArraysを追加する

**注:これはXMLの非常に単純化されたバージョンです。そこ11個の部門があり、87個の部門は、私は何を期待していますが、セクションとして課名、および各適切なセクション内の部署名と、のUITableViewにこの情報を表示している

<division> 
    <name> Sciences </name> 
    <departments> 

     <department> 
      <name> Computer Science </name> 
     </department> 

     <department> 
      <name> Biology </name> 
     </department> 

     <department> 
      <name> Chemistry </name> 
     </department> 

    </department> 
</division> 

合計します。

私はdivisionDictと呼ばれるNSDictionaryを持っています。これは各ディビジョンのNSArraysを保存したいものです。部門を含む。 departmentArrayというNSMutableArrayもあります。このNSMutableArrayには、各部門が含まれています。だから本質的に、私は部署で満たされた部署が必要です。

XMLを解析するためのコードです。完全に機能します。辞書に別々の配列を格納するのに問題があります。それが今解析され、キー "Sciences"で配列の要素を印刷しようとすると、Sciencesだけでなく、すべての部門の部門が印刷されます。

if(node_divisions) 
{ 
    node_division = [TBXML childElementNamed:@"division" parentElement:node_divisions]; 

    while (node_division) 
    { 
     node_divisionName = [TBXML childElementNamed:@"name" parentElement:node_division];]; 
     node_departments = [TBXML childElementNamed:@"departments" parentElement:node_division]; 
     node_department = [TBXML childElementNamed:@"department" parentElement:node_departments]; 
     divisionName = [TBXML textForElement:node_divisionName]; 
     while(node_department) 
     { 
      node_departmentName = [TBXML childElementNamed:@"name" parentElement:node_department]; 
      departmentName = [TBXML textForElement:node_departmentName]; 
      //add the department name to the array 
      [departmentArray addObject:departmentName]; 

      node_department = node_department->nextSibling; 
     } 
     //add the departmentArray to the dictionary, using the division name as the key 
     [divisionDict setObject:departmentArray forKey:divisionName];; 
     node_division = node_division->nextSibling; 
    } 
} 

ご協力いただきありがとうございます。私はおそらく見逃しているシンプルなことを知っていますが、私はこれを数時間前から見ていて、それを見ることはできません。他の情報が必要な場合は、私に知らせてください、私はすべてを詳細に説明しようとしました。 http://i.stack.imgur.com/a9nSb.png

答えて

2

あなたが同じ配列に各部門の部門のすべてを追加しているように見えます:

また、ここでうまくいけば、私が説明しようとしているかを示すのに役立ちます画像です。ループの各ディビジョンに新しい配列を作成するだけでいいと思います。

while (node_division) 
{ 
    departmentArray = [NSMutableArray array]; //add this line 
+0

ありがとうございます!私は毎回新しいアレイを作成する必要があることを知っていましたが、私の頭はとても揚げていました。私は思うことができませんでした.. – RyanG

+0

@ Ryan Garchinsky:あなたが本当に助けてくれたら、あなたは答えを受け入れる間にupvotingの習慣を守ります。 – EmptyStack

+0

divisionArrayを使用している他の場所を確認してください。 stringをdivisionArrayとして割り当てているか、配列が何度も解放されています。たぶん、divisionArrayを作成すると、[NSMutableArray arrayWithCapacity:]のようなものをそのまま使用していますか? –

関連する問題