无法访问另一个类的自我

时间:2012-07-12 15:14:35

标签: objective-c

我有一个关于XML请求的类。在一种方法(xmlRequest)中,我调用了RequestreturnXML)中的另一个函数,并将其传递给DDXMLDocumentreturnXML的要点是将xmlDocument设置为self的属性,以便我可以在不同的文件中访问它,主要是ViewController。我可以在self->xmlDocument中打印returnXML但是当我尝试在ViewController中打印出来时,它会显示NULL。我做错了吗?

在Request.m中:

-(void)returnXML: (DDXMLDocument *) xmldoc
 {
    self->xmlDocument =xmldoc;
    NSLog(@"%@", [self->xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]); //prints doc
    return xmldoc; 
 }

在ViewController中:

Request *http=[[Request alloc] init];
[http xmlRequest:@"http://legalindexes.indoff.com/sitemap.xml"];
NSLog(@"%@",[http->xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]); //prints doc

这就是我所说的returnXML

 -(void)xmlRequest:(NSString *)xmlurl
{
    AFKissXMLRequestOperation* operation= [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:xmlurl]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *XMLDocument) {
       // self.XMLDocument=XMLDocument;
        [self returnXML:XMLDocument];

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

1 个答案:

答案 0 :(得分:1)

您没有保留xmldoc,因此正在发布。

您需要创建@property@synthesize getter和setter方法:

在Request.h中:

@interface Request : NSObject
{
   DDXMLDocument *_xmlDocument;
}

@property (retain, nonatomic, readwrite) DDXMLDocument *xmlDocument;

...

@end

在Request.m中:

@implementation Request

@synthesize xmlDocument = _xmlDocument;

-(void)returnXML: (DDXMLDocument *) xmldoc
{
    self.xmlDocument = xmldoc;    // Use the setter!
    NSLog(@"%@", [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]);
    // No return from void!!!
}

@end

在ViewController中:

Request *http=[[Request alloc] init];
[http xmlRequest:@"http://legalindexes.indoff.com/sitemap.xml"];
NSLog(@"%@",[http.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]);

但是,如果将returnXML方法定义为void,我无法进行锻炼。我会把它交给你解决。