基本上我的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分类到自己的部分。
最感谢的任何帮助或建议。
非常感谢!
答案 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;
}