我试图将一个XML源导入到我的iOS应用程序中,以便用户可以阅读最近的帖子。但每次点击单元格时我都会收到此错误。将XML解析到iOS中
终止应用程序由于未捕获的异常“NSInvalidArgumentException”,理由是:“试图改变一个不可改变的对象与appendString:”
的代码如下,如果有人能帮助我走出那会是真棒!
- (void)viewDidLoad
{
[super viewDidLoad];
self.feeds = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:@"http://www.autoblog.com/rss.xml"];
self.parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[self.parser setDelegate:self];
[self.parser setShouldResolveExternalEntities:NO];
[self.parser parse];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"posts" forIndexPath:indexPath];
// Configure the cell...
cell.textLabel.text = [[self.feeds objectAtIndex:indexPath.row] objectForKey: @"title"];
return cell;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
self.element = elementName;
if ([self.element isEqualToString:@"item"]) {
self.item = [[NSMutableDictionary alloc] init];
self.title = [[NSMutableString alloc] init];
self.link = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([self.element isEqualToString:@"title"]) {
[self.title appendString:string];
} else if ([self.element isEqualToString:@"link"]) {
[self.link appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"item"]) {
[self.item setObject:self.title forKey:@"title"];
[self.item setObject:self.link forKey:@"link"];
[self.feeds addObject:[self.item copy]];
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[self.tableView reloadData];
}
只要你知道错误在这一点上的代码高亮显示:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([self.element isEqualToString:@"title"]) {
[self.title appendString:string];
} else if ([self.element isEqualToString:@"link"]) {
[self.link appendString:string];
}
}
'self.title'是'NSString'。你不能在'NSString'上调用'appendString:'。 – rmaddy
顺便说一句 - 你的'title'属性是否带有'copy'属性? – rmaddy
我应该怎样改变它? – dereksaunders