从函数目标c返回字符串

时间:2012-07-10 19:18:56

标签: objective-c xml

我有这个函数将通过请求操作获取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]创建了正确的输出,但我不能把它放在一个字符串中。如何将输出定向到字符串?

1 个答案:

答案 0 :(得分:1)

在该代码中,网络请求是异步发生的 - 您无法从该方法返回其结果。

NSLog(@"XMLDocument: %@", XMLDocument);位于成功处理程序块内 - 当请求实际完成时将调用该行。您应该使用代码替换log语句以将字符串保存在某处,然后再调用代码的其余部分。

有几种方法可以做到这一点:

  1. 在类@property (strong) DDXMLDocument *XMLDocument;

    上创建一个属性

    然后,您可以使用self.XMLDocument = XMLDocument;

    替换日志语句

    然后,制作另一种方法来完成剩余的处理。

  2. 或者,只需创建另一个方法,如-processWithXMLDocument:(DDXMLDocument *)XMLDocument;,您可以从块中调用,只需将其作为参数传递。

    我不记得调用成功处理程序的调度队列是什么,因此您可能必须小心在主线程上运行代码dispatch_async(dispatch_get_main_queue(), ^(){…