我有这个函数将通过请求操作获取xml:
-(id)xmlRequest:(NSString *)xmlurl
{
AFKissXMLRequestOperation *operation = [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:xmlurl]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *XMLDocument) {
NSLog(@"XMLDocument: %@", XMLDocument);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument) {
NSLog(@"Failure!");
}];
[operation start];
return operation;
}
这是我调用此函数的代码:
Request *http=[[Request alloc] init];
NSString *data=[http xmlRequest:@"http://legalindexes.indoff.com/sitemap.xml"];
NSError *error;
DDXMLDocument *ddDoc=[[DDXMLDocument alloc] initWithXMLString:data options:0 error:&error];
NSArray *xmlItems=[ddDoc nodesForXPath:@"//url" error:&error];
NSMutableArray *returnArray = [[NSMutableArray alloc] initWithCapacity:[xmlItems count]];
for(DDXMLElement* itemElement in xmlItems){
DDXMLElement *element = [[itemElement nodesForXPath:@"loc" error:&error] objectAtIndex:0];
NSLog(@"valueasstring %@", element);
[returnArray addObject:element];
}
我需要xmlRequest返回一个字符串,这样我才能获得XML,但是[operation start]创建了正确的输出,但我不能把它放在一个字符串中。如何将输出定向到字符串?
答案 0 :(得分:1)
在该代码中,网络请求是异步发生的 - 您无法从该方法返回其结果。
行NSLog(@"XMLDocument: %@", XMLDocument);
位于成功处理程序块内 - 当请求实际完成时将调用该行。您应该使用代码替换log语句以将字符串保存在某处,然后再调用代码的其余部分。
有几种方法可以做到这一点:
在类@property (strong) DDXMLDocument *XMLDocument;
然后,您可以使用self.XMLDocument = XMLDocument;
然后,制作另一种方法来完成剩余的处理。
或者,只需创建另一个方法,如-processWithXMLDocument:(DDXMLDocument *)XMLDocument;
,您可以从块中调用,只需将其作为参数传递。
我不记得调用成功处理程序的调度队列是什么,因此您可能必须小心在主线程上运行代码dispatch_async(dispatch_get_main_queue(), ^(){…