2014-05-16 1 views
0

RSS 피드를 구문 분석하는 UITableView에 요약을 추가하려고합니다. 요약을 얻는 방법을 설정했지만 앱이 충돌합니다. 피해자 라인은 다음과 같습니다RSS 피드의 요약 구문 분석으로 인해 앱이 손상 될 수 있습니다.

[item setObject:summary forKey:@"summary"]; 

충돌 번호 :

2014-05-17 09:32:09.231 ***[1169:90b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: summary)' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0453a1e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x037bd8e5 objc_exception_throw + 44 
    2 CoreFoundation      0x045c3eb8 -[__NSDictionaryM setObject:forKey:] + 888 
    3 ***         0x0010367a -[*** parser:didEndElement:namespaceURI:qualifiedName:] + 394 
    4 Foundation       0x034ac991 _endElementNs + 363 
    5 libxml2.2.dylib      0x00626788 xmlParseEndTag2 + 744 
    6 libxml2.2.dylib      0x00628bf8 xmlParseTryOrFinish + 3347 
    7 libxml2.2.dylib      0x00627cfa xmlParseChunk + 886 
    8 Foundation       0x034aa8fb -[NSXMLParser parseData:] + 329 
    9 Foundation       0x034aac17 -[NSXMLParser parseData:] + 1125 
    10 Foundation       0x034aadf1 -[NSXMLParser parseFromStream] + 287 

홈페이지 번호 :

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

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

      [item setObject:title forKey:@"title"]; 
      [item setObject:link forKey:@"link"]; 
    [item setObject:summary forKey:@"summary"]; 
      [feeds addObject:[item copy]]; 

     } 

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

    } 

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

     if ([element isEqualToString:@"title"]) { 
      [title appendString:string]; 
     } else if ([element isEqualToString:@"link"]) { 
      [link appendString:string]; 
     }else if ([element isEqualToString:@"summary"]) { 
      [summary appendString:string]; 
     } 

    } 

문제가 무엇입니까? 나는 코드가 돌아 오는 것이 없다고 말하는 것을 이해할 수있다. 그래서 요약 대신 무엇을 넣어야 하는가?

는 건배, SebOH

+1

해야한다. 우리가 아는 것에서 우리가 알 수있는 것은 그것이 없다는 것입니다. – Paulw11

+0

'didStartElement' 메소드도 표시 할 수 있습니까 – Paulw11

+0

업데이트 ^^^^^^^ –

답변

1

귀하의 문제는 didStartElement 방법에있다. item을 발견하면 비어있는 NSString에 요약을 초기화해야합니다. 그렇지 않으면 "nil"이되고, 결과적으로 nil에 대해 appendString을 계속 호출하게됩니다.

그것은 당신이 summary``의 값을 설정하는 데 사용하는 코드를 보여줄 필요가

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

    } 
} 
+0

업데이트 됨 .. ^^^^^ –

관련 문제