【问题标题】:NSXMLParser how to pass the NSMutableDictionary to a NSMutableArrayNSXMLParser 如何将 NSMutableDictionary 传递给 NSMutableArray
【发布时间】:2011-12-21 21:47:07
【问题描述】:

我想将我正在创建的 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;
    }

【问题讨论】:

  • 代码中存在大量内存泄漏,请确保在将值重新分配给您拥有所有权的对象之前释放值,并在 dealloc 中释放它们。将它们设置为零是不够的。
  • 自从引入 ARC 以来,我对发布东西感到非常困惑。我会调查..但我不是 100% 知道如何成功地做到这一点。
  • 好吧,如果您使用的是 ARC,我会收回这一点。继续。
  • lol :P 我有一些来自 WWDC 的视频可以在 arc 上观看。我已经阅读了大量内容等,我想我已经完成了大部分内容。但是我需要做一些事情让我头脑清醒..感谢您的评论

标签: iphone ios nsmutablearray nsxmlparser nsmutabledictionary


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多