0

NSURLを使用してWebサイト( http://undignified.podbean.com/feed)からXMLデータを使用するiOSアプリに取り組んでいます。そこから、NSXMLParserを使用してXMLを解析し、「enclosure」要素内の「url」という属性を検索します。次に、「url」に一致するすべての属性が_linksというラベルの付いたMutable配列に追加されます。問題は、「url」属性が見つかり、配列に追加されるたびに、それが前のエントリに追加され、配列内に本質的に1つの大きなオブジェクトが作成されることです。配列_linksをNSLogアウトすると、次のように表示されます。

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

配列にaddObjectを使用していて、insertObjectを試しましたが、どちらも機能しませんでした。私のコードは以下のとおりです。オブジェクトを配列にロードする他の例では、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
4

1 に答える 1

0

アレイ内にアレイを構築したと思います。

「NSMutableArray*_links;」を削除します

「[_linksaddObject:link];」を変更します 「[self.linksaddObject: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
于 2012-04-12T19:49:29.713 に答える