Ich scheine ein wahrscheinlich Anfängerproblem zu haben, aber hier ist es. Wie bekomme ich mein Wörterbuch aus meiner Parser-Klasse, die eine Baumstruktur für eine Drilldown-Tabelle zurück zu meiner DrilldowntableDelegate-Klasse erstellt hat. meine App sieht in etwa so aus.mein Wörterbuchbaum von meiner xmlparser Klasse .. zu meiner Drilldowntableappdelegate Datei erhalten
@implementation DrillDownAppAppDelegate
@synthesize window;
@synthesize navigationController;
@synthesize data;
-(void)StartParser
{
//NSURL *url = [[NSURL alloc] initWithString:@"http://sites.google.com/site/virtuagymtestxml/testxml/Books.xml"];
//NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
//local
NSString *Path = [[NSBundle mainBundle] bundlePath];
NSString *DataPath = [ Path stringByAppendingPathComponent:@"exercises.xml"];
NSData *Data = [[NSData alloc] initWithContentsOfFile:DataPath];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:Data];
//Initialize the delegate.
XMLParser *parser = [[XMLParser alloc] initXMLParser];
//Set delegate
[xmlParser setDelegate:parser];
//Start parsing the XML file.
BOOL success = [xmlParser parse];
if(success){
NSLog(@"No Errors");
}
else
{
NSLog(@"Error Error Error!!!");
}
}
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[self startParser];
NSString *Path = [[NSBundle mainBundle] bundlePath];
NSString *DataPath = [Path stringByAppendingPathComponent:@"Tree2.plist"];
NSDictionary *tempDict = [[NSDictionary alloc] initWithContentsOfFile:DataPath];
//this is what needs to happen
**NSDictionary *tempDict = dictionaryFromMyParser**
self.data = tempDict;
[tempDict release];
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
Meine Parser-Datei sieht so etwas wie dieses
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"exercises"]) {
//init tree
Tree = [NSMutableDictionary new];
Rows = [NSMutableArray new];
[Tree setObject:Rows forKey:@"Rows"];
//Initialize the array.
... all kinds of arrays here
}
if([elementName isEqualToString:@"menu_mob"]) {
amenuMob = [[menuMob alloc]init];
}
if([elementName isEqualToString:@"menuitem"]) {
amenuItem = [[menuItem alloc] init];
amenuItem.IDE = [[attributeDict objectForKey:@"id"] integerValue];
amenuItem.text = [attributeDict objectForKey:@"text"];
NSLog(@"reading id menuitem %i", amenuItem.IDE);
NSLog(@"reading text menuitem %@", amenuItem.text);
[appDelegate.menuitems addObject:amenuItem];
}
Ich habe aus der ganzen Internet meine Inspiration und Informationen bekommen Was funktioniert:
- einen schönen Baum Gebäude, kann in meine app gelesen werden (getestet mit writetoFile)
- xmlparsing funktioniert (ich anständige xmlfile)
- das drilldowntable Beispiel
Fazit: wie bekomme ich meinen Baum (von Parsern bauen), die durch meinen Parser meiner drilldowntableappdelegate bauen hat?
ps. wenn das nicht funktioniert, kann ich auch meinen Parser in meiner Delegatendatei erstellen (ich weiß schlampig, aber ich nehme an, dass mein gefüllter Baum dort funktioniert)