0

在这个函数中,我通过一个名为 AFKissXMLRequestOperation 的 Kiss xml 函数获取 xml。但由于它是无效的,除非我 NSLog 它,否则我无法访问 XMLDocument,但是当我需要访问 XML 时,这没有用。因此,我尝试将其设置为 self 的变量,以便在其他函数中访问它。如果我在块内使用 NSLog self.xmlDocument,它就可以工作。但是,当我在调用 NSLog(@"self!%@", [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]); 它是空的。那么如何访问 self.XMLDocument 呢?

    -(id)xmlRequest:(NSString *)xmlurl
{
AFKissXMLRequestOperation* operation= [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:xmlurl]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *XMLDocument) {
    NSLog(@"kiss operation %@", [XMLDocument XMLStringWithOptions:DDXMLNodePrettyPrint]);
    self.xmlDocument=XMLDocument;

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument) {
    NSLog(@"Failure!");
}];

[operation start]; 
NSLog(@"self!%@", [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]);
return self.xmlDocument; 
}
4

2 回答 2

1

NSURLRequest异步执行,因此您必须检查代码的组织方式或使用synchroneous网络操作。

上述代码中的错误是,由于 NSURLRequest异步执行,

NSLog(@"self!%@", [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]);
return self.xmlDocument; 

在 完成之前执行operation,因此返回nil.

真的需要回来xmlDocument吗?我不这么认为,因为您将其设置为属性。我的猜测是,在成功块中(您设置的位置self.xmlDocument=XMLDocument;),您实际上可以根据需要处理 xmlDocument 或调用执行此操作的方法。

希望有帮助

于 2012-07-30T15:44:32.367 回答
0

我相信 AFKissXMLRequestOperation 是一个异步操作,所以你应该对成功块内的响应做你需要做的事情。如果您希望将响应处理分开,那么成功块当然可以调用另一个函数。如果您需要将响应传递回另一个类,您可以通过设置自己的委托协议/属性或自己使用块来做到这一点:

委托协议:

@protocol XMLResponseHandlerDelegate <NSObject>

- (void)handleResponseXML:(XMLDocument *)xmlDoc;

@end

然后调用它:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:xmlurl]]; 
AFKissXMLRequestOperation* operation= [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *xmlDocument)     
{
    NSLog(@"kiss operation %@", [XMLDocument XMLStringWithOptions:DDXMLNodePrettyPrint]);
    [self.delegate handleResponseXML:xmlDocument];
} 
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument) 
{
    NSLog(@"Failure!");
}];
于 2012-07-30T15:47:32.560 回答