2015-01-21 3 views
0

NSXMLParser를 사용하여 Objective-C의 rss 피드를 구문 분석하고 있습니다.xml을 구문 분석 할 때 'appendString : 불변 개체 변경 시도'오류가 발생했습니다.

<?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 위임은 이것이다 : 이 RSS는이 유사하다 이미 필요한 모든 변수를 선언 한

- (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을 사용하여 변경 불가능한 객체를 변경하려고 시도했습니다."라는 버그가 나타났습니다.

당신은 어떻게 생각하십니까? 당신이 (가) 인 NSMutableString 촬영했다으로

+0

A.으로 대체해야; B. Stacktrace 포함 게시 오류 보고서를 게시합니다. C. 게시물의 코드를 조정하십시오. 감사합니다. –

답변

2

당신은 당신의 아래 코드

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"]]; 
    } 
관련 문제