2015-01-21 6 views
0

Я разбираю rss-канал в Objective-C с помощью NSXMLParser. Этот RSS похож на это:«Попытка изменить неизменяемый объект с помощью appendString:» при разборе xml

<?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"]; «Попытка мутировать неизменный объект с помощью appendString:».

Как вы думаете, ребята?

+0

А. выкладываю код стены включены объявление переменной; B. Опубликовать отчет о сбое stacktrace; C. отрегулируйте свой код в сообщении. Спасибо u. –

ответ

2

Как было принято 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"]]; 
    }