2010-09-15 2 views
0

Я действительно борюсь за это. У меня есть канал XML:разделы и строки uitableview от 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> 

можно управлять для разбора XML с:

- (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]; 
    } 

} 

Но когда я пытаюсь и показать это в моей таблице все это идет не так, когда я показываю более двух событий за одну дату. Я хочу, чтобы дата отображалась как заголовок раздела и события, которые будут отображаться ниже.

Любая помощь на этом прием ...

ответ

1

Эй дружище .. Я не знаю, если я понял coorect, но давайте идти ..

Вы можете создать словарь массивов ..

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

в массиве вы вставите все события одного дня ..

[events addObject:@"event 1"]; 

в словаре йо и будет вставить массив событий с тха дату в качестве ключа

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

всякий раз, когда парсер найти новую дату, новый массив должен быть создан (я имею в виду, что значения новый .. не добавлять в массив, очистите его, но вам не нужно создавать новый массив)

, конечно, вы должны внести некоторые изменения в синтаксический анализатор, чтобы определить даты и т. д., но это не имеет большого значения.

в таблице каждый раздел один ключ из словаря .. поэтому количество секций количества пунктов словаря .. и значение внутри секции является массивом каждой даты ..

Я надеюсь, что это поможет.

Смежные вопросы