iphone解析器完成后无效的字符串

时间:2010-01-11 07:12:00

标签: iphone nsxmlparser

我已经解析了一个xml并将解析后的数据存储在属性声明,保留和合成的字符串上,这些值在解析过程中会进入这些字符串,但在解析器完成解析后会失​​效。我无法从另一个IBAction方法访问它们,在那里我得到EXEC BAD ACCESS错误,根据我的经验,我认为当调试器访问无效的内存时会出现错误。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{            
//NSLog(@"found this element: %@", elementName);
currentElement = [elementName copy];
if ([elementName isEqualToString:@"resp"]) {
    // clear out our story item caches...
}
else if ([currentElement isEqualToString:@"org"]) {
    name = [attributeDict objectForKey:@"fileid"];
    extention = [attributeDict objectForKey:@"extension"];
    NSLog(@"image named %@ of type %@",name,extention);
}
else if ([currentElement isEqualToString:@"photo"]) {
    photoid = [attributeDict objectForKey:@"photoid"];
    NSLog (@"photo id = %@",photoid);
}       

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    //NSLog(@"found characters: %@", string);
    // save the characters for the current item...
    if ([currentElement isEqualToString:@"userid"]) {
        userid =[NSString stringWithString:string];
        NSLog (@"user id = %@",userid);
        } 
    else if ([currentElement isEqualToString:@"albumid"]) {
        albumid =[NSString stringWithString:string];
        NSLog (@"album id = %@",albumid);
    }
}

此部分工作正常,但

- (IBAction)download {
    NSString *urlstr = [NSString stringWithFormat:@"http://staging-data.mysite.com/%@/albumphoto/%@/%@/%@.%@",userid,albumid,photoid,name,extention];
    NSLog(urlstr);
    NSURL *url= [NSURL URLWithString:urlstr];
    NSData *imgdata = [[NSData alloc]initWithContentsOfURL:url];
    UIImage *img = [UIImage imageWithData:imgdata];
    newImage.image=img;
    [imgdata release];

}

这会导致错误。请帮忙

2 个答案:

答案 0 :(得分:1)

我建议你仔细看看这一行:

name = [attributeDict objectForKey:@"fileid"];

将XML解析器拥有的NSString属性设置为不复制,保留等等。我建议你复制一份,并保留它。

我担心的是,当XML解析器消失时,它会带有name字符串,以及extensionphotoid

答案 1 :(得分:0)

您还必须实现此方法以了解何时遇到结束标记。

  • (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName