xml解析器:解析器foundCharacters错误

时间:2014-12-05 15:51:41

标签: ios xml parsing rss

我正在从站点解析一些rss源,当我的代码到达解析器的findCharacters方法时,应用程序以exc_bad_access错误关闭。奇怪的是,当我在模拟器中运行我的应用程序时,应用程序运行没有问题。这是我的解析代码:

#pragma mark NSXMLParser delegate

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

if ([elementName isEqualToString:@"item"]) {

    [item setObject:title forKey:@"title"];
    [item setObject:link forKey:@"link"];

    [feeds addObject:[item copy]];

}

}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

element = elementName;

if ([element isEqualToString:@"item"]) {

    item    = [[NSMutableDictionary alloc] init];
    title   = [[NSMutableString alloc] init];
    link    = [[NSMutableString alloc] init];

}

}


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)strings {

if ([element isEqualToString:@"title"]) {
    [title appendString:strings];
} else if ([element isEqualToString:@"link"]) {
    [link appendString:strings];
}

}

- (void)parserDidEndDocument:(NSXMLParser *)parser {

[self.tableView reloadData];
}

我的错误在到达第一行时显示:

if ([element isEqualToString:@"title"]) {
    [title appendString:strings];
} else if ([element isEqualToString:@"link"]) {
    [link appendString:strings];
}

当我尝试更改这些行时,例如:

[title appendString:strings];

它运行完美,主要区别是我没有链接输入rss feed。 换句话说,问题似乎是在检查元素是否等于string @“title”时。 谢谢。

1 个答案:

答案 0 :(得分:0)

如果你不使用ARC,我当然会期待一个糟糕的访问,在这种情况下,极有可能是悬空指针。

无论如何,我会确保didEndElement在方法结尾处将element变量设置为nil(否则您可能会在title中出现意外的额外字符}和link值)。这也最大限度地减少了您在elementName中收到的didStartElement的偶然和不必要的引用,超出了您实际需要的范围。

就个人而言,如果我打算使用超出该方法范围的elementName传递给我的didStartElement,我倾向于copy传递给我的价值或使用其他一些状态变量来跟踪我是在解析title还是link或其他什么。