2012-04-12 14 views
0

NSUSを使用してWebサイトからXMLデータを使用するiOSアプリケーションで作業しています:http://undignified.podbean.com/feedそこから、NSXMLParserを使ってXMLを解析し、 "enclosure"要素内の "url"という属性を検索します。 "url"と一致するすべての属性は、_linksというラベルの変更可能な配列に追加されます。この問題は、 "url"属性が見つかって配列に追加されるたびに発生し、以前のエントリに追加され、本質的に配列内に大きなオブジェクトが1つ作成されます。私は配列をのNSLog場合、_linksは、以下が表示されます。私は、配列のためのaddObjectを使用していますとは、insertObjectを試みてきたが、どちらも働いているiOS:NSMutableArrayに追加されたアイテムは1つのアイテムとして表示されます

(
    (
    "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

関連する問題