1

xmlを解析し、解析されたデータをプロパティ宣言、保持、合成された文字列に保存しました。値は解析中にこれらの文字列に入りますが、パーサーが解析を終了すると無効になります。別のIBActionメソッドからそれらにアクセスできません。EXECBADACCESSエラーが発生します。これは、私の経験から、デバッガーが無効化されたメモリにアクセスしているときに発生すると考えられます。

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

}

これによりエラーが発生します。plsヘルプ

4

2 に答える 2

1

この行を注意深く見ることをお勧めします。

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

これは、XMLパーサーが所有する属性を、NSStringコピーしたり保持したりせずに設定します。コピーを取り、それを保持することをお勧めします。

私の懸念は、XMLパーサーがなくなると、name文字列と一緒に文字列を取得することextensionですphotoid

于 2010-01-11T07:23:16.363 に答える
0

終了タグがいつ検出されるかを知るためにも、このメソッドを実装する必要があります。

  • (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName
于 2010-01-11T07:17:45.243 に答える