1

NSXMLParser プロセスが完了するのを待ってから、他のプロセスを続行したいと考えています。NSXMLParser を使用して XML データを解析します。

これは私のコードです:

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
   NSLog(@"Did start element");
   if ( [elementName isEqualToString:@"FILENAME"])
   {
       XML_FIELD = FILENAME_CLOUD2;
       NSLog(@"found rootElement");
       return;
   }
   else if ( [elementName isEqualToString:@"UPLOADTIME"])
   {
       NSLog(@"found rootElement");
       XML_FIELD = UPLOADTIME2;
       return;
   }

}

didEndElement():

 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
   NSLog(@"Did end element");
   if ([elementName isEqualToString:@"FILENAME"])
   {
      NSLog(@"rootelement end");
   }
   XML_FIELD = UNIMPORTANT2;
}

foudCharaters():

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
   if (XML_FIELD == FILENAME_CLOUD2)
   {
      NSLog(@"Value %@",string);
      [FileCompletedArray insertObject:string atIndex:0];
   }
   else if (XML_FIELD == UPLOADTIME2)
   {
      NSLog(@"Value %@",string);
      [UploadTimeArray insertObject:string atIndex:0];
   }
}

上記のコードは NSXMLParser からデータを取得するために使用されますが、私のアプリは xml 解析プロセスが完了するまで待機する必要があります。使えますdispatch ()か?

4

2 に答える 2

7

NSXMLParser完全に同期して動作します。メソッドが返されると、parse解析が終了します (またはエラーで失敗しました)。したがって、完了するまで「待つ」必要はありません。

于 2013-07-15T07:54:58.157 に答える
1

その非常に単純な..

NSXMLParser *parser=[[NSXMLParser alloc] initWithData:data];
parser.delegate=self;

if([parser parse]){
   NSLog(@"Parsing Finished");
}else{
   NSLog(@"Parsing Failed");
}

パーサーはデリゲート関数を呼び出します

- (void)parserDidStartDocument:(NSXMLParser *)parser{
     NSLog(@"Parsing started");
}

関数parseが呼び出されたとき..

于 2013-07-15T07:55:44.500 に答える