2010-09-15 6 views
0

Je suis vraiment en difficulté à ce sujet. J'ai un flux XML:uitableview sections et lignes de xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<data> 
    <date> 
     <name>27/9/10</name> 
     <event> 
      <title>Event 1</title> 
      <more>Copy in here</more> 
     </event> 
    </date> 
    <date> 
     <name>04/10/10</name> 
     <event> 
      <title>Event 1</title> 
      <more>Copy in here</more> 
     </event> 
     <event> 
      <title>Second Event</title> 
      <more>Copy in here</more> 
     </event> 
    </date> 
</data> 

je peux gérer pour analyser le xml avec:

- (void)parseXMLFileAtURL:(NSString *)URL { 
    sections = [[NSMutableArray alloc] init]; 
    items = [[NSMutableArray alloc] init]; 

    NSURL *xmlURL = [NSURL URLWithString:URL]; 
    rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
    [rssParser setDelegate:self]; 
    [rssParser parse]; 
} 

- (void)parserDidStartDocument:(NSXMLParser *)parser { 

} 

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

    currentElement = [elementName copy]; 

    if ([elementName isEqualToString:@"event"]) { 
     currentTitle = [[NSMutableString alloc] init]; 
     currentSummary = [[NSMutableString alloc] init]; 
    } 

    if ([elementName isEqualToString:@"date"]) { 
     item = [[NSMutableDictionary alloc] init]; 
    currentSection = [[NSMutableString alloc] init]; 
    } 
} 

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

    if ([elementName isEqualToString:@"date"]) { 
     [item setObject:[NSNumber numberWithInt:itemsCount] forKey:@"itemsCount"]; 
     [item setObject:currentSection forKey:@"name"]; 
     [items addObject:[item copy]]; 

     itemsCount = 0; 
    } 

    if ([elementName isEqualToString:@"event"]) { 
     [item setObject:currentTitle forKey:@"title"]; 
     [item setObject:currentSummary forKey:@"more"]; 
     [items addObject:[item copy]]; 

     itemsCount = itemsCount + 1; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    if ([currentElement isEqualToString:@"name"]) { 
     [currentSection appendString:string]; 
    } else if ([currentElement isEqualToString:@"title"]) { 
     [currentTitle appendString:string]; 
    } else if ([currentElement isEqualToString:@"more"]) { 
     [currentSummary appendString:string]; 
    } 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser { 

    [self.progressView.view removeFromSuperview]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
    [dataTable reloadData]; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    if ([sections count] == 0) { 
     NSString * path = @"http://www.campuscloud.co.uk/_dev/calendar.xml"; 
     [self parseXMLFileAtURL:path]; 
    } 

} 

Mais quand je tente de l'afficher dans ma table tout va mal quand j'afficher plus de deux événements pour la date. Je veux que la date apparaisse comme un en-tête de section et les événements à afficher ci-dessous.

Toute aide sur cet accueil ...

Répondre

1

Hey buddy .. Je ne sais pas si je compris coorect, mais allons-y ..

Vous pouvez créer un dictionnaire de tableaux ..

NSMutableDictionary *dates = [NSMutableDictionary alloc]; 
NSMutableArray *events = [NSMutableArray alloc]; 

dans le tableau que vous insérerez tous les cas d'une seule date ..

[events addObject:@"event 1"]; 

dans le dictionnaire yo u insérer le tableau des événements avec tha date clé

[dates setobject:events forKey:@"01/01/2010"]; 

chaque fois que l'analyseur trouver une nouvelle date, un nouveau tableau doit être créé (je veux dire, les valeurs sont nouvelles .. ne rajoutez pas le tableau, nettoyez-le .. mais vous n'avez pas besoin de créer un nouveau tableau)

bien sûr que vous devez faire quelques changements sur l'analyseur pour identifier les dates et etc, mais ce n'est pas une grosse affaire.

dans votre table chaque section est une clé de votre dictionnaire .. donc le nombre de sections est le nombre d'éléments dans le dictionnaire .. et les valeurs à l'intérieur de la section est le tableau de chaque jour ..

J'espère que cela aide ..

Questions connexes