NSXMLParser, как передать NSMutableDictionary в NSMutableArray - PullRequest
0 голосов
/ 22 декабря 2011

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

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

#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 Ответ

2 голосов
/ 22 декабря 2011

В -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;
}
...