0

こんにちは、xml ファイルを解析しています。responseString に保存した応答も取得しました。呼び出されていないデリゲート メソッドに関する問題です。解析コードは次のとおりです。

    -(void)getData
{
     NSURL *url = [NSURL URLWithString:@"http://quizpro.testshell.net/api/quiz/4"];
 NSData *data = [NSData dataWithContentsOfURL:url];  // Load XML data from web

 NSString *applicationDocumentsDir = 
 [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
 NSString *storePath = [applicationDocumentsDir stringByAppendingPathComponent:@"quiz.xml"];

 NSLog(@"store path is %@",storePath);

 [data writeToFile:storePath atomically:TRUE];

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

request.delegate=self;

[request startSynchronous];

NSError *error = [request error];

if (!error)
{
     NSData *responseData=[request responseData];

     NSString *data  =[[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding] autorelease];

     NSString *usableXmlString = [data stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

     NSLog(@"usableXmlString is %@",usableXmlString);

     NSData *usableData = [usableXmlString dataUsingEncoding:NSUTF8StringEncoding];

     NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:usableData];

    [xmlParser setDelegate:self];
    [xmlParser parse];

}   
}  

- (void)requestFinished:(ASIHTTPRequest *)request
{
NSLog(@"requestFinished method");

// Use when fetching text

NSString *responseString = [request responseString];  

** I get the entire data here ** 
NSLog(@"responseString is %@",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];
}

そして、私は以下のようなNSXMLParserデリゲートメソッドを書きました

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
 {
 NSLog(@"parser/didStartElement");

 currentTag = elementName;


 if ([currentTag isEqualToString:@"questions"])
 {
     exams_object=[[ExamsObject alloc]init];
     NSLog(@"%@",currentTag);
 } 

  if ([currentTag isEqualToString:@"Question"])
 {
  exams_object=[[ExamsObject alloc]init];
 }

 if ([currentTag isEqualToString:@"Response"])
 {
 exams_object.responseArray=[[NSMutableArray alloc]init];
 }
   NSLog(@"%@",currentTag);

 }  

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
 {
 NSLog(@"parser/didEndElement");

 if ([currentTag isEqualToString:@"questions"])
 {
     exams_object=[[ExamsObject alloc]init];
 } 

 if([elementName isEqualToString:@"Question"])
 {
 [mainArray addObject:exams_object];
 }

 }  

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)str
 {

 NSLog(@"parser/foundCharacters");

 if ([currentTag isEqualToString:@"questionText"])
 {
 [exams_object.questionArray addObject:str];
 } 
 if ([currentTag isEqualToString:@"responseText"])
 {
 [exams_object.responseArray addObject:str];
 }  
 }  

助けてくれてありがとう

4

2 に答える 2

0

@interfaceにNSXMLParserDelegateを追加したかどうかを確認し、使用しているクラスにparser.delegate=selfを設定します。

于 2013-01-03T09:34:31.770 に答える
0

NSXMLParserDelegateファイルにとを含めASIHTTPRequestDelegateました.hか?

ASIHTTPRequest を使用して実行の流れを確認するのデリゲートから XML を解析するメソッドを呼び出していますbreakpoints

@interface yourClassName: NSObject <NSXMLParserDelegate, ASIHTTPRequestDelegate>

これらのstackoverflowの質問も確認してください

于 2013-01-03T06:32:38.663 に答える