2011-08-01 15 views
0

私は必要なものを探しましたが、失敗しました。NSMutableDictionariesに格納される数を知らずにNSMutableDictionariesに格納していますか?

私はwebserviceからXML文字列を読み込んでおり、自分の情報をコアデータに格納する必要があります。私はそれを選択された部門のすべてのサブディビジョンを指すDepartmentから順にソートしなければなりません。そして、サブディビジョンが選択されると、そのサブディビジョンのすべてのアイテムがリストされます。 この問題は、データテーブルにすべての自分の情報を受け取っているため、部門とサブデパートの重複があります。 ソートするには、それぞれの部門の名前を保持する辞書の配列を持つ場所に情報を格納し、それぞれのサブディメンションの名前を保持する辞書の配列、次にその辞書の別の配列すべてのアイテム情報を保持します。

は私が...それは次のようにする必要が

  1. 部門辞書の配列
    1. 部門辞書
      1. サブ部門辞書の文字列保持部署名
      2. アレイ
        1. サブディクショナリ辞書
          1. 項目辞書
            1. 項目辞書
              1. 文字列保持アイテム名
      3. 情報より多くの項目を保持
      4. 文字列の配列をサブ部門名を保持する文字列
しかし、問題は、私は私が最初の部門に遭遇したとき、私はそれを保存し、その後、私は後に発生したその部門のいずれかのサブ部門がちょうどに保存することができますので、これを実現する方法がわからないですそのDepartmentsディクショナリの配列と、そのサブディビジョンの項目が同じことになります。これもできますか?

(私はそれを他の言い方をする方法を見つけ出すことはできません申し訳ありません、そのきれいではありません...)

XMLコード例:

 <QSR_VIEWS_INVENTORY_ITEMS_LIST diffgr:id="QSR_VIEWS_INVENTORY_ITEMS_LIST1" msdata:rowOrder="0"><CompanyID>104</CompanyID><QSRInventoryItemID>111</QSRInventoryItemID><Description>Test Item 111</Description><Department>_</Department><Subdepartment>_</Subdepartment><SequenceNumber>0</SequenceNumber><CountDisplayUnitName>CA</CountDisplayUnitName><CountDisplayUnitInCase>1.0000</CountDisplayUnitInCase><ReorderAt>0.0000</ReorderAt><ReorderTo>0.0000</ReorderTo><CaseUnitName>CA</CaseUnitName><CaseInCase>1.0000</CaseInCase><PackUnitName>_</PackUnitName><PacksInCase>0.0000</PacksInCase><StackUnitName>_</StackUnitName><StacksInCase>0.0000</StacksInCase><EachUnitName>_</EachUnitName><EachInCase>0.0000</EachInCase><InLocation1>N</InLocation1><InLocation2>N</InLocation2><InLocation3>N</InLocation3><InLocation4>N</InLocation4><InLocation5>N</InLocation5><InLocation6>N</InLocation6><InLocation7>N</InLocation7><InLocation8>N</InLocation8><InLocation9>N</InLocation9><InLocation10>N</InLocation10><InLocation11>N</InLocation11><InLocation12>N</InLocation12><InLocation13>N</InLocation13><InLocation14>N</InLocation14><InLocation15>N</InLocation15><OnShiftCountSheet>Y</OnShiftCountSheet><OnDayCountSheet>Y</OnDayCountSheet><OnWeekCountSheet>Y</OnWeekCountSheet><OnMonthCountSheet>Y</OnMonthCountSheet><OnWasteCountSheet>Y</OnWasteCountSheet><EquivalentToItemID>0</EquivalentToItemID><EquivalentCaseFactor>0.0000</EquivalentCaseFactor></QSR_VIEWS_INVENTORY_ITEMS_LIST> 
+0

私はKey-Value-Codingがキーだと思います。 – dasdom

+0

取得しているXML文字列の構造の例を追加できますか? –

+0

@Martin Pilkington:私はそれを追加しました。そして、私はそれらの100以上を得るただ1つのラインthatsです。 –

答えて

1

私はあなたが必要とするすべては1つの余分の辞書だと思います個々の部門とサブ部門のすべての鍵を持っている場合は、その辞書を使用して、すでに新しい部門があるかどうかを確認し、そうでない場合は、適切な場所に作成します。メモリオーバーヘッドは無視してください。余分な辞書には既存のオブジェクトへのポインタがあります。

+0

okありがとう、私はそれを試してみましょう。 –

0

Answer provided by Alex Mayfield


注:私がやっていることよりも、これを行う方法のより良い方法はおそらくあります。

BOOL addI = YES; 
BOOL addS = YES; 
BOOL addD = YES; 
int I; 
int S; 
int D; 

for(int i = 0; i < [DArray count]; i++) 
{ 
    DDictionary = [DArray objectAtIndex:i]; 
    //NSLog([NSString stringWithFormat:@"%@ vs %@", soapResults12, [DDictionary objectForKey:@"Title"]]); 
    if([soapResults12 isEqualToString:[DDictionary objectForKey:@"Title"]]) 
    { 
     D = i; 
     //NSLog(@"GOT IT"); 
     SArray = [DDictionary objectForKey:@"Subdepartments"]; 
     for(int k = 0; k < [SArray count]; k++) 
     { 
      SDictionary = [SArray objectAtIndex:k]; 
      soapResults11 = [soapResults11 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
      //NSLog([NSString stringWithFormat:@"%@ vs %@", soapResults11, [SDictionary objectForKey:@"Title"]]); 
      if([soapResults11 isEqualToString:[SDictionary objectForKey:@"Title"]]) 
      { 
       S = k; 
       //NSLog(@"GOT IT"); 
       IArray = [SDictionary objectForKey:@"Items"]; 
       for(int r = 0; r < [IArray count]; r++) 
       { 
        IDictionary = [IArray objectAtIndex:r]; 
        //NSLog([NSString stringWithFormat:@"%@ vs %@", soapResults1, [IDictionary objectForKey:@"Title"]]); 
        if([soapResults1 isEqualToString: [IDictionary objectForKey:@"Title"]]) 
        { 
         //NSLog(@"GOT IT"); 
         I = r; 
         r = [IArray count]; 
         addI = NO; 
         addS = NO; 
         addD = NO; 
        } 
        else 
        { 
         addI = YES; 
         addS = NO; 
         addD = NO; 
        } 

       } 
       k = [SArray count]; 

      } 
      else 
      { 

       addS = YES; 
       addD = NO; 
      } 

     } 
     i = [DArray count]; 

    } 
    else 
    { 

     addD = YES; 
    } 

} 
if(addI && !addS && !addD) 
{       
    IDictionary = [[NSMutableDictionary alloc] init]; 
    [IDictionary setObject:soapResults1 forKey:@"Title"]; 
    [IArray addObject:IDictionary]; 
    [SDictionary setObject:IArray forKey:@"Items"]; 
    [SArray replaceObjectAtIndex:S withObject:SDictionary]; 
    [DDictionary setObject:SArray forKey:@"Subdepartments"]; 
    [DArray replaceObjectAtIndex:D withObject:DDictionary]; 
} 
if(addS && !addD) 
{ 
    IDictionary = [[NSMutableDictionary alloc] init]; 
    IArray = [[NSMutableArray alloc] init]; 
    [IDictionary setObject:soapResults1 forKey:@"Title"]; 
    [IArray addObject:IDictionary]; 
    SDictionary = [[NSMutableDictionary alloc] init]; 
    [SDictionary setObject:soapResults11 forKey:@"Title"]; 
    [SDictionary setObject:IArray forKey:@"Items"]; 
    [SArray addObject:SDictionary]; 
    [DDictionary setObject:SArray forKey:@"Subdepartments"]; 
    [DArray replaceObjectAtIndex:D withObject:DDictionary]; 

}  

if(addD) 
{ 
    IDictionary = [[NSMutableDictionary alloc] init]; 
    IArray = [[NSMutableArray alloc] init]; 
    [IDictionary setObject:soapResults1 forKey:@"Title"]; 
    [IArray addObject:IDictionary]; 
    SDictionary = [[NSMutableDictionary alloc] init]; 
    SArray = [[NSMutableArray alloc] init]; 
    [SDictionary setObject:soapResults11 forKey:@"Title"]; 
    [SDictionary setObject:IArray forKey:@"Items"]; 
    [SArray addObject:SDictionary]; 
    DDictionary = [[NSMutableDictionary alloc] init]; 
    [DDictionary setObject:soapResults12 forKey:@"Title"]; 
    [DDictionary setObject:SArray forKey:@"Subdepartments"]; 
    [DArray addObject:DDictionary]; 
} 
関連する問題