我有一个关于XML请求的类。在一种方法(xmlRequest
)中,我调用了Request
(returnXML
)中的另一个函数,并将其传递给DDXMLDocument
。 returnXML
的要点是将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];
答案 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
,我无法进行锻炼。我会把它交给你解决。