0

XML 要求に関するすべてのクラスがあります。1 つのメソッド ( ) で、 ( )xmlRequest内の別の関数を呼び出して. ポイントは、をselfのプロパティとして設定して、主にViewControllerなどのさまざまなファイルでアクセスできるようにすることです。で印刷できますが、ViewControllerで印刷しようとすると、と表示されます。私は何か間違ったことをしていますか?RequestreturnXMLDDXMLDocumentreturnXMLxmlDocumentself->xmlDocumentreturnXMLNULL

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

ViewController で:

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 に答える