0

基本的に、私のテーブルビューには、通りがアルファベット順にソートされた 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];
}  
}

A、B、C などに含まれる通りを正しいセクションに入力するために、一度解析された XML を複数の配列に分割する方法が必要です。

Dictionary の作成とキーの作成に関する複数の投稿を読みましたが、解析された XML からこれを行う方法がわかりません。ディクショナリに入れたら、どうすればtableViewにデータを入力できますか? indexTitles 用に別の配列があり、右側に AZ インデックスが表示されています。しかしもちろん、AZ に基づいてデータを独自のセクションにソートする必要があるため、これは機能しません。

どんな助けや提案も大歓迎です。

どうもありがとう!

4

1 に答える 1

0

XMLを適切に解析する方法を学ぶための優れたチュートリアルがたくさんあります。ここに簡単な説明があります。

.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デリゲートメソッドを使用してテーブルを作成し、さらに次のデリゲートメソッドを使用してサイドインデックスを作成します。

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

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
  return index;
}
于 2012-06-14T18:45:29.990 に答える