В настоящее время я пытаюсь разобрать строковое представление моего xml, которое я получаю из моего php-скрипта на моем сервере, который передается методу ASIHTTPRequest
* - (void) requestFinished: (ASIHTTPRequest ) запрос
Я хочу использовать NSXMLParser для разбора этого xml, пока у меня все готово и работает, посмотрите код того, как я это сделал, однако проблема, с которой я сталкиваюсь, заключается в том, что он, кажется, обращается к * - (void ) parser: (NSXMLParser *) parser foundCharacters: (NSString ) string { метод несколько раз .. когда я только хочу, чтобы он обращался к нему один раз и возвращал значение. Любые идеи о том, почему это происходит, будут с благодарностью.
- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text
NSString *responseString = [request responseString];
NSData *xData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
//myCode.text = responseString;
//NSLog(@" response %@", responseString);
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xData];
[parser setDelegate:self];
[parser parse];
[parser release];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if ([elementName isEqual:@"code"]) {
NSLog(@"Found title!");
titleString = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
[titleString appendString:string];
NSLog(@"the code string =%@", titleString);
}
// Editted :::::
Я забыл добавить этот метод делегата, который вызывается последним и выдаст окончательный результат. И причина, по которой я сказал, что это не работает, заключается в том, что я написал что-то неправильно в имени метода .... все исправлено и работает отлично.
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqual:@"code"]) {
//NSLog(@"ended title: %@", titleString);
//Pass code over to animation
[self parseCodeForAnimation:titleString];
[titleString release];
titleString = nil;
}
}