无法访问自己?

时间:2012-07-30 15:28:38

标签: objective-c self

在这个函数中,我通过一个名为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; 
}

2 个答案:

答案 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!");
}];