Adding objects to an NSMutableArray, order seems odd when parsing from an XML file

Posted by diatrevolo on Stack Overflow See other posts from Stack Overflow or by diatrevolo
Published on 2009-05-07T18:28:13Z Indexed on 2010/04/20 3:03 UTC
Read the original article Hit count: 326

Filed under:
|
|

Hello:

I am parsing an XML file for two elements: "title" and "noType". Once these are parsed, I am adding them to an object called aMaster, an instance of my own Master class that contains NSString variables.

I am then adding these instances to an NSMutableArray on a singleton, in order to call them elsewhere in the program. The problem is that when I call them, they don't seem to be on the same NSMutableArray index... each index contains either the title OR the noType element, when it should be both... can anyone see what I may be doing wrong? Below is the code for the parser. Thanks so much!!

#import "XMLParser.h"
#import "Values.h"
#import "Listing.h"
#import "Master.h"

@implementation XMLParser

@synthesize sharedSingleton, aMaster;

- (XMLParser *) initXMLParser {

    [super init];
    sharedSingleton = [Values sharedValues];
    aMaster = [[Master init] alloc];
    return self;
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict {

    aMaster = [[Master alloc] init];

    	//Extract the attribute here.

    if ([elementName isEqualToString:@"intro"]) {
    	aMaster.intro = [attributeDict objectForKey:@"enabled"];
    } else if ([elementName isEqualToString:@"item"]) {
    	aMaster.item_type = [attributeDict objectForKey:@"type"];
    	//NSLog(@"Did find item with type %@", [attributeDict objectForKey:@"type"]);

    	//NSLog(@"Reading id value :%@", aMaster.item_type);
    } else {
    	//NSLog(@"No known elements");
    }

    //NSLog(@"Processing Element: %@", elementName);    //HERE
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

    if(!currentElementValue) 
    	currentElementValue = [[NSMutableString alloc] initWithString:string];
    else {
    	[currentElementValue appendString:string];//[tempString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
    	CFStringTrimWhitespace((CFMutableStringRef)currentElementValue);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if ([elementName isEqualToString:@"item"]) {
    	[sharedSingleton.master addObject:aMaster];
    	NSLog(@"Added %@ and %@ to the shared singleton", aMaster.title, aMaster.noType);  //Only having one at a time added... don't know why
    	[aMaster release];

    	aMaster = nil;

    } else if ([elementName isEqualToString:@"title"]) {
    	[aMaster setValue:currentElementValue forKey:@"title"];
    } else if ([elementName isEqualToString:@"noType"]) {
    	[aMaster setValue:currentElementValue forKey:@"noType"]; 
    	//NSLog(@"%@ should load into the singleton", aMaster.noType);
    }
    NSLog(@"delimiter");
    NSLog(@"%@ should load into the singleton", aMaster.title);
    NSLog(@"%@ should load into the singleton", aMaster.noType);

    [currentElementValue release];
    currentElementValue = nil;

}

- (void) dealloc {
    [aMaster release];
    [currentElementValue release];
    [super dealloc];
}

@end

© Stack Overflow or respective owner

Related posts about iphone

Related posts about Xml