Saiten für ungültig erklärt, nachdem Parser fertig, iphone
-
19-09-2019 - |
Frage
Ich habe eine XML analysiert und gespeichert, um die analysierten Daten auf Strings, die sind geistiges Eigentum erklärt, beibehalten und synthetisiert, die Werte werden immer in diese Zeichenfolgen während der Analyse, aber nach dem Parser Finish Parsing für ungültig erklärt werden. Ich bin nicht in der Lage, sie aus einer anderen IBAction Methode zuzugreifen, wobei i EXEC BAD ACCESS Fehler erhalten, die, aus meinen Erfahrungen, denkt, dass entsteht, wenn der Debugger einen für ungültig erklären Speicher zuzugreift.
- (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);
}
}
Dieser Teil funktioniert gut, aber
- (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];
}
Dies führt zu Fehler. pls help
Lösung
Ich schlage vor, Sie schauen genau auf dieser Linie:
name = [attributeDict objectForKey:@"fileid"];
Welche ein Attribut zu einem NSString
durch den XML-Parser ohne das Kopieren sie im Besitz setzt, hält sie usw. Ich schlage vor, Sie eine Kopie nehmen, und das beibehalten.
Meine Sorge ist, dass, wenn der XML-Parser weggeht, den name
String mit ihm nimmt, zusammen mit extension
und photoid
.
Andere Tipps
Sie haben diese Methode implementieren auch zu wissen, wann ein End-Tag angetroffen wird.
- (void) Parser: (NSXMLParser *) Parser didEndElement: (NSString *) element namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) QNAME