0

Я хотел бы передать nsdictionary, который я создаю, в nsmutablearray, но я не уверен, когда и как это сделать в делегатах nsxmlparser.NSXMLParser как передать NSMutableDictionary в NSMutableArray

это то, что я сделал до сих пор

#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. Установка их на нуль недостаточно. – Joe

+0

Я очень растерялся о том, чтобы выпускать вещи с тех пор, как был введен ARC. Я буду исследовать .. но я не на 100% о том, как это сделать. –

+0

Хорошо, тогда я беру это обратно, если вы используете ARC. Продолжать. – Joe

ответ

2

В -parser:didEndElement:namespaceURI:qualifiedName:, прислушайтесь к концу item элемента, а затем добавить valueDictionary к изменчивому экземпляру массива на вашем классе.

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; 
} 
Смежные вопросы