我正在解析某個站點的一些rss提要,並且當我的代碼到達解析器的方法時,應用程序關閉時發現exc_bad_access錯誤。奇怪的是,當我在模擬器中運行我的應用程序時,應用程序運行沒有問題。這是我的解析代碼:xml解析器:解析器foundCharacters錯誤
#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」。 謝謝。
儘管這裏有問題,但我不確定爲什麼你會遇到訪問不良(除非你不使用ARC)。順便說一句,確保'didEndElement'將'element'變量設置爲'nil'在方法結束時(或者最終可能會在標題和鏈接值中出現意外的額外字符)。 – Rob 2014-12-05 16:04:45
YES SIR !!!這是我的想法。我不明白爲什麼會發生這種情況。我已經將元素變量設置爲nil在didendelement中並且它可以工作。沒有錯誤。非常感謝你的靈感。 – user3882720 2014-12-05 16:12:05