2012-04-12 3 views
0

NSUS를 사용하여 웹 사이트에서 XML 데이터를 사용하는 iOS 앱인 http://undignified.podbean.com/feed에서 작업하고 있습니다. 거기에서 NSXMLParser를 사용하여 XML을 구문 분석하고 "인클로저"요소 내에서 "url"이라는 속성을 검색합니다. "url"과 일치하는 모든 속성은 _links 레이블이 붙은 변경 가능 배열에 추가됩니다. 문제는 "url"속성이 발견되어 배열에 추가 될 때마다 발생합니다. 이전 항목에 추가하고 기본적으로 배열에 하나의 큰 객체를 만드는 것입니다. 내가 배열을 NSLog 경우, _links은, 다음이 표시됩니다 내가 배열에 대한 addObject을 사용하고 있는데은 insertObject을 시도했지만, 어느 일한iOS : NSMutableArray에 추가 된 항목이 하나의 항목으로 표시됩니다.

(
    (
    "http://undignified.podbean.com/mf/feed/hm8a2d/UndignifiedBonusShow.mp3", 
    "http://undignified.podbean.com/mf/feed/cfdayc/UndignifiedShow03.mp3", 
    "http://undignified.podbean.com/mf/feed/wbbpjw/UndignifiedShow02Final.mp3", 
    "http://undignified.podbean.com/mf/feed/ih2x8r/UndignifiedShow01.mp3", 
    "http://undignified.podbean.com/mf/feed/t4x54d/UndignifiedShow00.mp3" 
    ) 
) 

. 내 코드는 다음과 같습니다. 필자는 for 루프를 구현해야하는 배열에 객체를로드하는 다른 경우를 알고 있지만 파서 메서드가 전체 XML 문서를 반복하여 루프하는 것처럼 보이는지 여기에서 필요한지 확실하지 않습니다. 나는 그것이 내가 누락 된 작은 무엇인가라고 확신한다. 그리고 바른 방향의 찔레는 크게 인정 될 것이다.

UnDigParser.H - 구문 분석에 대한 파일을 들으

@interface UnDigParser : NSXMLParser <NSXMLParserDelegate> { 

} 
@property (retain) NSMutableArray *links; 
@end 

UnDigParser.M - 구문 분석에 대한 실행 파일 :

@implementation UnDigParser 
NSMutableArray *_links; 

@synthesize links = _links; 

-(void)parserDidStartDocument:(NSXMLParser *)parser{ 
_links=[[NSMutableArray alloc] init]; 
} 

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
if ([elementName isEqualToString:@"enclosure"]){ 

    NSString *link = [attributeDict objectForKey:@"url"]; 
    if (link){ 
     [_links addObject:link]; 
     } 
} 
NSLog(@"%@",_links); 

} 

-(BOOL)parse{ 
self.delegate = self; 
return [super parse]; 
} 

@end 

답변

0

난 당신이 배열 안에 배열을 구축 믿습니다.

"NSMutableArray * _links;"를 제거합니다.

"변경 : [_links addObject : link];" "[self.links addObject : link]"

및 "_links = [[NSMutableArray alloc] init]"에 " to "links = [[NSMutableArray alloc] init];"

링크를 참조하려면 self.links를 사용하십시오. 그것을 지칭하기 위해 모든 _links를 사용하지 마십시오.

내가 (너무 변경 몇 가지 다른 것들) 작성합니다 방법 :

@interface UnDigParser : NSXMLParser <NSXMLParserDelegate> { 

    NSMutableArray *links; 

} 
@property (nonatomic, retain) NSMutableArray *links; 
@end 

UnDigParser.M - 구문 분석에 대한 실행 파일 :

@implementation UnDigParser 

@synthesize links; 

-(void)parserDidStartDocument:(NSXMLParser *)parser{ 
self.links=[[NSMutableArray alloc] init]; 
} 

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
if ([elementName isEqualToString:@"enclosure"]){ 

    NSString *link = [attributeDict objectForKey:@"url"]; 
    if (link){ 
     [self.links addObject:link]; 
     } 
} 
NSLog(@"%@",self.links); 

} 

-(BOOL)parse{ 
self.delegate = self; 
return [super parse]; 
} 

@end 
+0

감사, 저스틴. 의견에 감사드립니다. _links를 꺼내 self.links로 바꾸고 언급 한 다른 수정을 수행했습니다. 여기에 결과가 나오지 만 여전히 1 항목 또는 여러 항목으로 계속보고되고 있는지 확실하지 않습니다. – Fostenator

+0

출력을 게시하는 데 문제가 있습니다 만 기본적으로는 열기 괄호 url, url, 닫는 괄호입니다. – Fostenator

+0

디버깅 콘솔을 확인할 때 배열 "링크"에 1 개의 객체로 추가되었음을 확인했습니다. – Fostenator