题
我已经解析了一个 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];
}
这会导致错误。请帮忙
解决方案
我建议你在这行仔细看:
name = [attributeDict objectForKey:@"fileid"];
这台由XML解析器拥有的NSString
属性不复制它,保留它等等。我建议你去副本,并保存好。
我担心的是,当XML解析器消失,它采用name
串用它,用extension
和photoid
一起。
其他提示
您还必须实现此方法才能知道何时遇到结束标记。
- (void)解析器:(NSXMLParser *)解析器 didEndElement:(NSString *)elementName 命名空间URI:(NSString *)namespaceURI QualifiedName:(NSString *)qName
不隶属于 StackOverflow