2012-05-27 2 views
0

newTBXMLWithURL 메서드를 사용하여 xml 데이터를로드하려고하는데 한 번 성공 블록이 xml을 반환하면 컨트롤러가 NSMutableArray 레코드를 수신하도록 위임을 사용하여 디스패치하려고하지만 잘못된 작업을 수행해야하며 오류가 발생해야합니다. "PROGRAM RECEIVED EXC_BAD_ACCESS"라는 콘솔에 내가 잘못 갔는지 모르겠습니다. 코드TBXML 블록 iOS

#import "XmlParser.h" 
#import "TBXML+HTTP.h" 
#import "NewsObject.h" 

@implementation XmlParser 
@synthesize delegate = _delegate; 

- (void)GetNewsList 
{ 

    TBXMLSuccessBlock s = ^(TBXML *tbxml) { 
     NSMutableArray *arrayOfNews; 

     TBXMLElement *root = tbxml.rootXMLElement; 

     TBXMLElement *newsListElement = [TBXML childElementNamed:@"NewsList" parentElement:root]; 

     TBXMLElement *newsElement = [TBXML childElementNamed:@"News" parentElement:newsListElement]; 

     while(newsElement !=nil){ 

      NewsObject *news = [[NewsObject alloc]init]; 

      news.headLine = [TBXML textForElement: newsElement ->firstChild]; 
      news.description = [TBXML textForElement:newsElement ->firstChild->nextSibling]; 
      news.imageUrl = [TBXML textForElement:newsElement->firstChild->nextSibling->nextSibling]; 

      if(arrayOfNews==nil) 
       arrayOfNews = [NSMutableArray arrayWithObject:news]; 
      else 
       [arrayOfNews addObject:news]; 

      newsElement = newsElement ->nextSibling; 
     } 

     [self.delegate XmlParser:self feedReady:arrayOfNews]; 
    }; 

    TBXMLFailureBlock f = ^(TBXML *tbxml, NSError *error) { 
     NSLog(@"nay"); 
    }; 


    [TBXML newTBXMLWithURL:[NSURL URLWithString:@"url"] 
        success: s 
        failure: f]; 

} 
@end 

입력 샘플 아래 첨부 :

<xmlData> 
<NewsList> 
<News newsId="1" providerId="1" articleId="95020" sportId="6" sportName="RBL"> 
<Headline>Matai signs on with Manly</Headline> 
<Description> 
Manly has retained another one of its premiership stars with Steve Matai committing to the Sea Eagles until the end of the 2015 season. 
</Description> 
<Image> 
http:google.com/All.png 
</Image> 
</News> 
<News newsId="2" providerId="1" articleId="95019" sportId="7" sportName="RBU"> 
<Headline>Reds lose Lucas for Brumbies clash</Headline> 
<Description> 
Queensland has lost key utility back Ben Lucas to injury on the eve of Saturday night's vital match with the Brumbies at Canberra Stadium. 
</Description> 
<Image> 
http:google.com/All.png 
</Image> 
</News> 
</NewsList> 
<xmlData> 

답변

0

덕분에 우리가 실제 오류 메시지를 알려 주셔서. 그 오류나 경고에 대한 유일한 이유는 없습니다.

또한 ARC를 사용하고 있습니까? 아니면 자동 갱신을 잊어 버렸습니까? 어떤 Xcode 버전과 컴파일러를 사용하고 있습니까? 이러한 모든 세부 사항이 중요합니다.

난 당신이 블록 내부에이 피 self를 해결할 수 말할 것 :

__block id _self = self; 
TBXMLSuccessBlock s = ^(TBXML *tbxml) { 
    /* use _self inside the block, not self */ 
}; 

https://stackoverflow.com/a/7854315/143097를 참조하십시오.

이전 대답은 : newTBXMLWithURL:success:failure: :

당신이 존재하지 않는 메소드를 호출있어 보인다. 적어도 내 버전의 TBXML에서는 tbxmlWithURL:success:failure:이라고합니다.

오류 메시지의 어딘가에 대한 힌트가있을 것입니다. 그렇지 않습니까?

+0

newTBXMLWithURL이있는 TBXML의 새로운 버전이라고 생각합니다. 내가 위에서 언급 한 오류는 "EXC_BAD_ACCESS"이며 콘솔에는 "프레임에없는 블록을 사용하여 USE_BLOCK_IN_FRAME 변수를 만들려고합니다."라고 나와 있는데, 이것이 블록과 관련이 있다고 확신하지만 수정 방법에 대해 확신하지 못합니다. 그것. – user1325394

+0

그게 전부 였어. 도와 주셔서 정말로 고맙습니다. – user1325394