строки, признанные недействительными после завершения парсера, iphone - PullRequest
1 голос
/ 11 января 2010

Я проанализировал 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 ]

1 голос
/ 11 января 2010

Предлагаю вам внимательно посмотреть на эту строку:

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

, который устанавливает атрибут для NSString, принадлежащего синтаксическому анализатору XML, без его копирования, сохранения и т. Д. Я предлагаю вам взять копию и сохранить ее.

Меня беспокоит то, что когда анализатор XML исчезает, он берет строку name вместе с extension и photoid.

0 голосов
/ 11 января 2010

Вы должны также реализовать этот метод, чтобы узнать, когда встречается конечный тег.

  • (void) анализатор: (NSXMLParser *) синтаксический анализатор didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualName: (NSString *) qName
...