objective-cnsmutablearraynsarraytbxml

trying to push array to an array in objective c


Im using TBXML to parse some data to an NSMutableArray, my app breaks, and I dont understand why.

NSMutableArray *shareArray;

@implementation RecordParser

-(void)addToArray:(NSArray *)addArray {

    shareArray=[[NSMutableArray alloc]init];
    [shareArray addObject:addArray];   
}

    - (void)traverseXMLElement:(TBXMLElement *)element {
    do {
        if (element->firstChild)
            [self traverseXMLElement:element->firstChild];

        if ([[TBXML elementName:element] isEqualToString:@"element"]) {
            TBXMLElement *id = [TBXML childElementNamed:@"id" parentElement:element];
            TBXMLElement *path = [TBXML childElementNamed:@"path" parentElement:element];
            TBXMLElement *share_type = [TBXML childElementNamed:@"share_type" parentElement:element];
            TBXMLElement *token = [TBXML childElementNamed:@"token" parentElement:element];
            [self addToArray:[NSArray arrayWithObjects:
                                [TBXML textForElement:id],
                                [TBXML textForElement:path],
                                [TBXML textForElement:share_type],
                                [TBXML textForElement:token], nil]];
        }
    } while ((element = element->nextSibling));

}

The Breakingpoint is at the [self addToArray:[NSArray arrayWithObjects:... line.

Any help much appreciated!

EDIT:

One of my elements were returning nil, as suggested in comments below.

I got a new problem with only last value added to array, but that was because I shareArray=[[NSMutableArray alloc]init]; every time I added an object.


Solution

  • Only the last object is stored in the array because you are initializing the sharedArray everytime the addToArray method is called. Declare sharedArray as an ivar or a property and do the initialization in viewDidLoad for example.