Parsing XML into 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];
    }
}

我希望在评论区我们几乎解决了你的问题。

从我看到的xml数据标题,你遇到一个CDDATA块。这是一种特殊类型的数据,你必须处理它。您可以尝试这样来获取数据....

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
{
    self.title = [[NSMutableString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
}

您可以按照此链接了解有关获取CDDATA的更多信息NSXMLParser没有't忽略CDATA

最新更新