iOS:添加到NSMutableArray的项目显示为一个项目

时间:2012-04-12 19:24:20

标签: ios nsmutablearray nsxmlparser

我正在使用一个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

1 个答案:

答案 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