【问题标题】:How to wait for NSXMLParser to complete in iOS如何在 iOS 中等待 NSXMLParser 完成
【发布时间】:2013-07-13 00:10:01
【问题描述】:

我想等待 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 () 吗?

【问题讨论】:

  • @Kasaname:我更新了我的问题。谢谢
  • 我不知道 ParseXML 或 NSParseXML。你是说 NSXMLParser 吗?
  • @MartinR:是的,我使用 NSParseXML
  • @NGOT:???什么是 NSParseXML?那是第三方框架吗?
  • 所以你使用 NSXMLParser 而不是 NSParseXML ?你是想迷惑我们吗?

标签: iphone ios objective-c nsxmlparser parsexml


【解决方案1】:

NSXMLParser 完全同步工作。当parse 方法返回时,解析完成(或因错误而失败)。所以不需要“等待”它完成。

【讨论】:

【解决方案2】:

很简单..

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被调用时..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多