0

我正在开发一个 iOS 应用程序,它使用 NSURL 来使用来自网站的 XML 数据:http: //undignified.podbean.com/feed。从那里我使用 NSXMLParser 解析 XML 并在“enclosure”元素中搜索一个名为“url”的属性。然后将所有匹配“url”的属性添加到标记为 _links 的可变数组中。问题是每次找到“url”属性并将其添加到数组中时,它都会将其添加到上一个条目中,并在数组中创建一个大对象。如果我 NSLog 退出数组 _links,则会显示以下内容:

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

并更改“[_links addObject:link];” 到“[self.links addObject:link]”

和“_links = [[NSMutableArray alloc] init];” 到“链接 = [[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 回答