Ich analysiere eine XML-Datei für zwei Elemente: "title" und "noType". Sobald diese analysiert sind, füge ich sie zu einem Objekt namens Master hinzu, einer Instanz meiner eigenen Master-Klasse, die NSString-Variablen enthält.Hinzufügen von Objekten zu einem NSMutableArray, Reihenfolge erscheint beim Analysieren aus einer XML-Datei ungerade
Ich füge diese Instanzen dann zu einem NSMutableArray in einem Singleton hinzu, um sie an anderer Stelle im Programm aufzurufen. Das Problem ist, dass, wenn ich sie anrufe, sie scheinen nicht auf dem gleichen NSMutableArray-Index zu sein ... jeder Index enthält entweder den Titel oder das noType-Element, wenn es beides sein sollte ... kann jemand sehen, was ich sein kann falsch machen? Unten ist der Code für den Parser. Vielen Dank!!
#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
Danke Andy! Das war der Schuldige. Das hatte ich komplett vermisst. –
Wenn Sie Ihre Frage beantworten, sollten Sie meine Antwort akzeptieren (drücken Sie das Häkchen auf der linken Seite meiner Antwort), so dass sie nicht mehr als unbeantwortet angezeigt wird. – Andy