0

我有一个关于 XML 请求的课程。在一个方法 ( ) 中,我在( )xmlRequest中调用另一个函数并将其传递给. 关键是将 设置为 self 的属性,以便我可以在不同的文件中访问它,主要是 ViewController。我可以打印出来,但是当我尝试在 ViewController 中打印出来时,它说。难道我做错了什么?RequestreturnXMLDDXMLDocumentreturnXMLxmlDocumentself->xmlDocumentreturnXMLNULL

在 Request.m 中:

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

在视图控制器中:

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]; 
4

1 回答 1

1

你没有保留xmldoc,所以它被释放了。

您需要创建一个@property以及@synthesizegetter 和 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

在视图控制器中:

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

但是returnXML,如果您的方法定义为void. 我会把它留给你解决。

于 2012-07-12T15:21:20.327 回答