Ich habe this tutorial gefolgt und der Parsing-Teil funktioniert einwandfrei. Mein Problem ist, dass beim Ausdrucken der Werte, die ich im Objekt ablege (in meinem Fall ist das Objekt ein Auto), immer Null bleibt. Ich speichere alle Objekte in einem NSMutableArray, das immer eine Länge hat/count == 0 ... was mache ich falsch? Das Array ist, wie in dem Code zu sehen ist, in der Delegate-Klasse definiert ...XMLParser und NSMutableArray
- (XMLParser *) initXMLParser {
[super init];
appDelegate = (Car2GoAppDelegate *) [[UIApplication sharedApplication]delegate];
currentElementValue = [[NSMutableString alloc]init];
return self;
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attribute:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"kml"]) {
appDelegate.cars = [[NSMutableArray alloc]init];
}
else if([elementName isEqualToString:@"Placemark"]) {
aCar = [[Car alloc]init];
}
else
return;
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *) string {
[currentElementValue appendString:string];
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *) elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"kml"])
return;
if([elementName isEqualToString:@"Style"])
return;
if([elementName isEqualToString:@"IconStyle"])
return;
if([elementName isEqualToString:@"Icon"])
return;
if([elementName isEqualToString:@"color"])
return;
if([elementName isEqualToString:@"colorMode"])
return;
if([elementName isEqualToString:@"scale"])
return;
if([elementName isEqualToString:@"href"])
return;
if([elementName isEqualToString:@"styleUrl"])
return;
if([elementName isEqualToString:@"a"])
return;
if([elementName isEqualToString:@"Placemark"]) {
[appDelegate.cars addObject:aCar];
[aCar release];
aCar = nil;
}
else if([elementName isEqualToString:@"name"]) {
[aCar setValue:currentElementValue forKey:elementName];
}
else if([elementName isEqualToString:@"description"]) {
[aCar setValue:currentElementValue forKey:elementName];
[currentElementValue setString:@""];
}
else if([elementName isEqualToString:@"coordinates"]) {
[aCar setValue:currentElementValue forKey:elementName];
[currentElementValue setString:@""];
NSLog(@"aCar coordinates:%@", [aCar coordinates]);
}
else
return;
}
- (void) dealloc {
[aCar release];
[currentElementValue release];
[super dealloc];
}
@end
/Schleife
Ich auch, obwohl dies verdächtig war. Du bringst die appDelegate.cars jedes Mal weg, wenn du ein kml-Element bekommst. Ich weiß nicht, ob du das willst oder nicht. – amattn