why don't the Children in my nsdictionary fill up

Discussion in 'iOS Programming' started by ulquiorra, Sep 4, 2009.

  1. ulquiorra macrumors member

    Jun 17, 2009
    Hello all I'm using NSXMLParser to parse some xml data. I'm using this data to build a Tree representation to create a hierarchy for a drilldowntable.
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
      namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
     attributes:(NSDictionary *)attributeDict {
     if([elementName isEqualToString:@"exercises"]) {
       //init tree 
      appDelegate.Tree = [NSMutableDictionary new];
      appDelegate.Rows = [NSMutableArray new];
      [appDelegate.Tree setObject:appDelegate.Rows forKey:@"Rows"];
    Now if the element menuitem in my xml is being read then it will initialize and add theChildren to the menu_item dictionary

    if([elementName isEqualToString:@"menuitem"]) {
      appDelegate.theChildren = [NSMutableArray new];
      [appDelegate.menu_item setObject:appDelegate.theChildren forKey:@"Children"];
    This is all going according to plan.

    However the following is not going the way I want it to go. When I see another tag (workout_mob) I want theChildren to be filled and this only happens with the bottom dictionary item.


    if([elementName isEqualToString:@"workout_mob"]) {
      appDelegate.work_out_mob = [NSMutableDictionary new];
      [appDelegate.theChildren addObject:appDelegate.work_out_mob];
    Does anyone have a clue as to why it isn't at least filling both my items I mean it's adding the Children array to the both of them so why just the bottom one for the rest. If I add another xmlline in my xml code like so:

       <menuitem id="1" text="Press this for exercises" pic="workout" />
       <menuitem id="2" text="VirtuaGym online" pic="online" />
                        *<menuitem id="3" text="the Added Line" pic="online" />*
    then it will add all the Children items to the bottom menuitem ( imagine another dictionary item (3)). So why ?
  2. dejo Moderator


    Staff Member

    Sep 2, 2004
    The Centennial State
    If menuitem is always a child node of workout_mob / menu_mob (not sure which since your code snippet uses workout_mob but your XML snippet uses menu_mob), then here is your problem:
    if([elementName isEqualToString:@"menuitem"]) {
        [B]appDelegate.theChildren = [NSMutableArray new];[/B]
    Every time you encounter a new child node (menuitem) you are resetting the array for the parent node (workout_mob).
  3. ulquiorra thread starter macrumors member

    Jun 17, 2009
    thanks man! that was it.... I was indeed resetting my array..

Share This Page