In this function I get xml through a kiss xml function called AFKissXMLRequestOperation. But since it is void, I can’t access the XMLDocument unless I NSLog it, but that isn’t useful when I need to access the XML. So, I try to set it as a variable of self in order to access it in other functions. If I NSLog self.xmlDocument inside of the block, it works. But, when I NSLog it outside the block in the call NSLog(@”self!%@”, [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]); it is NULL. So how can I access 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;
}
NSURLRequestperforms asynchroneously, so you will have to review either the way your code is organised, or using asynchroneousnetwork operation.The error in your above code is that since
NSURLRequestperforms asynchroneously, theis performed before the
operationhas finished, thus returningnil.Do you really need to return
xmlDocument? I don’t think so, because you set it as a property. My guess is that in the success block, (where you setself.xmlDocument=XMLDocument;) you could actually process the xmlDocument as you want to or call a method that do such.Hope that helps