我正在使用一个iOS应用程序,该应用程序使用NSURL来使用来自网站的XML数据:http://undignified.podbean.com/feed。从那里我使用NSXMLParser解析XML并在“enclosure”元素中搜索名为“url”的属性。然后将匹配“url”的所有属性添加到标记为_links的Mutable数组中。问题是每次找到“url”属性并将其添加到数组中时,它会将其添加到上一个条目中并在数组中创建一个大的对象。如果我NS注销数组_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
答案 0 :(得分:0)
我相信你在数组中构建了一个数组。
我会摆脱“NSMutableArray * _links;”
并更改“[_links addObject:link];” to“[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