0

私はnsmutablearrayに作成しているnsdictionaryを渡したいと思いますが、いつ、どのようにnsxmlparser delegateで行うのか分かりません。NSXMLParser NSMutableArrayにNSMutableDictionaryを渡す方法

これは私がこれまで-parser:didEndElement:namespaceURI:qualifiedName:

#pragma mark - Parsing lifecycle 

- (void)startTheParsingProcess:(NSData *)parserData 
{  
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //parserData passed to NSXMLParser delegate which starts the parsing process 

    [parser setDelegate:self]; 
    [parser parse]; // starts the event-driven parsing operation. 
} 


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName isEqualToString:@"item"]) { 
     valueDictionary = [[NSMutableDictionary alloc] init]; 
    }  
} 

-(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock 
{ 
    NSMutableString *dicString = [[NSMutableString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding]; 
    currentElement = dicString; 
} 



- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"title"]) { 
     titleString = currentElement; 
     [self.valueDictionary setObject:titleString forKey:@"title"]; 

     NSLog(@"%@", [valueDictionary objectForKey:@"title"]); 
     NSLog(@" "); 
     currentElement = nil; 
    } 
    if ([elementName isEqualToString:@"description"]) 
    { 
     descriptionString = currentElement; 
     [self.valueDictionary setObject:descriptionString forKey:@"description"]; 

     NSLog(@"%@", [valueDictionary objectForKey:@"description"]); 
     NSLog(@" "); 
     currentElement = nil; 
    } 
+1

コードのメモリリークがたくさんある場合は、所有権を取得するオブジェクトに値を再割り当てする前に値を解放し、deallocでも解放してください。それらをnilに設定するだけでは不十分です。 – Joe

+0

私はARCが導入されて以来、物事をリリースすることについて非常に混乱しています。私は調査するつもりです。しかし、これをsucsessfullyする方法については100%ではありません。 –

+0

それでは、ARCを使用している場合、私はそれを取り戻します。続ける。 – Joe

答えて

2

をやっていることで、あなたのクラスに可変配列のインスタンスにvalueDictionaryを追加し、item要素の終了を聞きます。

if ([elementName isEqualToString:@"item"]) 
{ 
    [self.mutableArrayOfDictionaries addObject:self.valueDictionary]; 
} 

if ([elementName isEqualToString:@"title"]) { 
    titleString = currentElement; 
    [self.valueDictionary setObject:titleString forKey:@"title"]; 

    NSLog(@"%@", [valueDictionary objectForKey:@"title"]); 
    NSLog(@" "); 
    currentElement = nil; 
} 

if ([elementName isEqualToString:@"description"]) 
{ 
    descriptionString = currentElement; 
    [self.valueDictionary setObject:descriptionString forKey:@"description"]; 

    NSLog(@"%@", [valueDictionary objectForKey:@"description"]); 
    NSLog(@" "); 
    currentElement = nil; 
} 
関連する問題