Domanda

Ho analizzato un xml e memorizzati i dati analizzati in stringhe, che sono di proprietà dichiarata, trattenuto e sintetizzato, i valori sono sempre in queste stringhe durante l'analisi, ma sono in corso invalidata dopo l'analisi finitura parser. Io non sono in grado di accedervi da un altro metodo IBAction, dove ottengo EXEC errore BAD ACCESS, che, dalle mie esperienze, pensano che si verifica quando il debugger accede una memoria invalidata.

- (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);
    }
}

Questa porzione sta lavorando bene, ma

- (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];

}

Ciò si traduce in errore. pls aiutare

È stato utile?

Soluzione

Vi suggerisco di guardare con attenzione a questa linea:

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

che definisce un attributo a un NSString di proprietà del parser XML senza copiarlo, conservandolo ecc vi consiglio di prendere una copia, e mantenere quello.

La mia preoccupazione è che quando il parser XML va via, ci vuole la stringa name con esso, insieme con extension e photoid.

Altri suggerimenti

Si deve implementare questo metodo anche sapere quando viene rilevato un tag di chiusura.

  • (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top