cordas anulada após analisador terminar, iphone
-
19-09-2019 - |
Pergunta
Eu analisado um xml e armazenados os dados analisados ??em cordas que são propriedade declarada, retidos e sintetizados, os valores estão se metendo essas cadeias durante a análise, mas estão sendo anulada após a análise acabamento analisador. Eu não sou capaz de acessá-los de outro método IBAction, onde eu recebo erro EXEC BAD ACCESS, que, a partir de minhas experiências, penso que surge quando o depurador está acessando uma memória invalidado.
- (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);
}
}
Esta parte está funcionando bem, mas
- (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];
}
Isso resulta em erro. pls help
Solução
Eu sugiro que você olhar cuidadosamente para esta linha:
name = [attributeDict objectForKey:@"fileid"];
O que define um atributo para um NSString
de propriedade do parser XML sem copiá-lo, mantê-la etc. sugiro que pegue uma cópia e guarde isso.
A minha preocupação é que quando o analisador XML vai embora, leva a corda name
com ele, junto com extension
e photoid
.
Outras dicas
Você tem que implementar este método também para saber quando uma tag final é encontrado.
- (void) parser: (NSXMLParser *) analisador didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) QNAME