在这个函数中,我通过一个名为AFKissXMLRequestOperation的kiss xml函数得到xml。但由于它是无效的,我无法访问XMLDocument,除非我对它进行NSLog,但是当我需要访问XML时这并不是很有用。因此,我尝试将其设置为self的变量,以便在其他函数中访问它。如果我在块内部的NSLog self.xmlDocument,它的工作原理。但是,当我在调用NSLog的块外部NSLog(@" self!%@",[self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]);它是NULL。那么如何访问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;
}
答案 0 :(得分:1)
NSURLRequest
执行异常,因此您必须检查代码的组织方式或使用synchroneous
网络操作。
上述代码中的错误是因为NSURLRequest
执行异步,
NSLog(@"self!%@", [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]);
return self.xmlDocument;
在operation
完成之前执行,因此返回nil
。
你真的需要返回xmlDocument
吗?我不这么认为,因为你将它设置为财产。我的猜测是在成功块中,(你设置self.xmlDocument=XMLDocument;
的地方)你可以实际处理你想要的xmlDocument,或者调用一个这样做的方法。
希望有所帮助
答案 1 :(得分: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!");
}];