所以我正在编写一个函数,该函数对API进行身份验证,该API返回包含我想要传递的内容的XML文档。该函数可以很容易地使用NSURLConnection的sendSynchronousRequest
方法进行同步调用。然而,一旦这个方法返回,我需要实例化一个NSXMLParser实例,用数据启动它,让它解析等等。
我想做的是,在我的函数中(在sendSynchronousRequest
返回之后),实例化NSXMLParser,给它解析数据,并在单个方法调用中,让它启动解析,并且在解析结束之前不要返回。
例如:
- (void) myFunction
{
/* other code */
NSData *returnedData = [NSURLConnection sendSynchronousRequest:authRequest returningResponse:&authResponse error:&authError];
MyParserClass *parser = [[MyParserClass alloc] initWithData:returnedData];
[parser parseData];
}
在上面的示例中,MyParserClass
是NSXMLParser委托,并以通常的委托方式进行所有解析。 parseData
将启动解析,直到结束才会返回。
我应该以什么方式撰写parseData
?块方法?
答案 0 :(得分:3)
我建议编写一个实现NSXMLParserDelegate
协议的类(例如,MyParserDelegate
)。当解析器调用委托方法时,它应该构建一个包含要从XML文件中提取的信息的数据结构。我打电话给它如下:
// create the delegate MyParserDelegate *delegate = [[MyParserDelegate alloc] init]; // create the parser NSXMLParser *parser = [[NSXMLParser alloc] initWithData:returnedData]; [parser setDelegate:delegate]; // parse the file if ([parser parse]) { // the XML was valid and parsed without error // now, do something with the data you extracted // e.g., self.xmlData = [delegate xmlBasedDataStructureBuiltByDelegate]; } else { // the XML was invalid // handle the error }
MyParserDelegate
的功能完全取决于您要从XML文件中提取的内容。我建议您阅读Apple的Event-Driven XML Programming Guide以获取更多信息。
请记住,如果要使用同步NSURLConnection
,则应在后台线程上执行此操作。