ios - '尝试用 appendString :' error when parsing xml 改变不可变对象(immutable对象)

标签 ios rss nsmutablestring nsxml

我正在使用 NSXMLParser 解析 Objective-C 中的 rss 提要。 此 rss 与此类似:

<?xml version="1.0" encoding="UTF-8"?>
                <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
                    <channel>
                        <title>My RSS</title>
                        <description>My Rss parser</description>

                <item>

                <title>Some kind of a title</title>
                <description>
                <![CDATA[]]>
                </description>
                <media:thumbnail url="http://www.example.org/pics/Thumbs/picture.jpg"/>
                <pubDate>Tue, 20 Jan 2015 22:24:56 -0500</pubDate>
            </item>
</channel>
                </rss>

我的 NSXML 代表是这样的:

    - (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];
        pubDate = [[NSMutableString alloc] init];

    }

    if([element isEqualToString:@"media"]){
        imageLink = [[NSMutableString alloc] init];
      imageLink = [attributeDict objectForKey:@"url"];
    }

    NSLog (@"Parse did Start");
}

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

    if ([element isEqualToString:@"title"]) {
        [title appendString:string];
    } else if ([element isEqualToString:@"media"]) {
        imageLink = string;
    } else if ([element isEqualToString:@"pubDate"]) {
        [pubDate appendString:string];
    }
    NSLog(@"Found characters");
}

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

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

        [item setObject:title forKey:@"title"];
       [item setObject:imageLink forKey:@"media"];
        [item setObject:pubDate forKey:@"pubDate"];

        [feeds addObject:[item copy]];

    }

    NSLog(@"Did end elements");

}

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

    [self.tableView reloadData];
    NSLog(@"Parsing is done");
    NSLog(@"%@", title);

}

我已经声明了所有需要的变量。正如您可能已经看到的,我正在尝试解析以 rss 元素的属性形式呈现的链接。在我这样做之前,应用程序运行良好,但图像 imageLink = [attributeDict objectForKey:@"url"]; "Attempt to mutate immutable object with appendString:"bug 出现了。

大家怎么看?

最佳答案

因为你已经使用了 NSMutableString 你应该替换下面的代码

if([element isEqualToString:@"media"]){
    imageLink = [[NSMutableString alloc] init];
    imageLink = [attributeDict objectForKey:@"url"];
   }

 if([element isEqualToString:@"media"]){
       imageLink = [[NSMutableString alloc] init];
      [imageLink appendString:[attributeDict objectForKey:@"url"]];
    }

关于ios - '尝试用 appendString :' error when parsing xml 改变不可变对象(immutable对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077786/

相关文章:

ios - Xcode 6 : display called functions in real time

ios - 多个名为 'count' 的方法发现警告

api - 新闻数据API或Feed

objective-c - Cocoa:绑定(bind)到 XIB 的 NSMutableString 不会更新,但 NSString 绑定(bind)会更新

objective-c - 如何在 NSMutableString 中修剪 ""和 "\n"

ios - 通过 WIFI 从 iPhone 连接到本地网络服务(在 MAMP 下运行)。

ios - 将选择器传递给扩展

c# - 当请求 xml 页面时提供 ashx 页面

python - 使用 scrapy 创建 RSS

ios - CFStringTransform线程安全且可重入吗?