由xml填充的TableView需要分区数据并在表的右侧创建A-Z索引

时间:2012-06-14 10:18:12

标签: iphone ios uitableview nsindexpath

基本上我的tableview中填充了街道名称列表,这些街道名称是从按字母顺序排序的街道的XML解析的数据。

XML有几条街道可供A,B,C等使用。 (每个基本上和不同的大小超过1个)

问题是:基本上它将整个数组添加到A部分,B部分等等。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.searchDisplayController.searchResultsTableView)
{
    return [self.filteredListContent count];
}
else
{
    return [xmlDataArray count];
}  
}

我需要一种方法来分解XML,一旦解析成多个数组,将A,B,C等中包含的街道填充到正确的部分。

我已阅读有关创建字典和创建密钥的多篇帖子,但我不知道如何从解析的XML中执行此操作。一旦我在字典中有它,我怎么能填充tableView?我有一个单独的indexTitles数组,A-Z索引显示在右边。但当然这不起作用,因为数据需要根据A-Z分类到自己的部分。

最感谢的任何帮助或建议。

非常感谢!

1 个答案:

答案 0 :(得分:0)

有很多很好的教程可以学习如何正确解析XML,这里有一个简单的说法:

in .h

@interface ObjectName : ObjectSuperclass <NSXMLParserDelegate> {
    NSMutableString *currentElement;
    NSMutableString *childElement;
    NSMutableDictionary *dictionary;
}

@end
<。>在.m中,插入这些NSXMLParser委托方法:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    
  currentElement = nil;
  currentElement = [elementName copy];
  if ([elementName isEqualToString:@"xmlParentElement"]) {
    //This means the parser has entered the XML parent element named: xmlParentElement
    //All of the child elements that need to be stored in the dictionary should have their own IVARs and declarations.
    childElement = [[NSMutableString alloc] init];
  }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
  //For all child elements, run this if statement.
  if (currentElement isEqualToString:@"childElement") {
    [childElement appendString:string];
  }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{   
  if ([elementName isEqualToString:@"parentElement"]) {
    [dictionary addObject:childElement forKey:@"childElement"];
    //And devise a system for indexing (this could be converting the address string in to an array and taking objectAtIndex:0.. any way you choose, add that object below:
    [dictionary addObject:@"A" forKey@"index"];
  }
}  

现在已经完成,使用常规UITableViewController Delegate方法创建表,此外,使用这些委托方法创建侧索引:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
  return [dictionary objectForKey:@"index"];
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
  return index;
}