0

この関数では、AFKissXMLRequestOperation と呼ばれるキス xml 関数を介して xml を取得します。しかし、これは void であるため、NSLog しない限り XMLDocument にアクセスすることはできませんが、XML にアクセスする必要がある場合には役に立ちません。そこで、他の関数でアクセスするために、self の変数として設定しようとしています。ブロック内で NSLog self.xmlDocument を実行すると、機能します。しかし、呼び出し NSLog(@"self!%@", [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]); でブロックの外に NSLog すると、ヌルです。では、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; 
}
4

2 に答える 2

1

NSURLRequestは非同期で実行されるため、コードの構成方法またはsynchroneousネットワーク操作の使用方法を確認する必要があります。

上記のコードのエラーは、 NSURLRequest非同期で実行されるため、

NSLog(@"self!%@", [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]);
return self.xmlDocument; 

が終了する前に実行されるためoperation、 が返されnilます。

本当に戻る必要がありますxmlDocumentか?プロパティとして設定しているので、そうは思いません。私の推測では、success ブロック ( を設定した場所self.xmlDocument=XMLDocument;) で、実際に xmlDocument を必要に応じて処理したり、そのようなメソッドを呼び出したりすることができます。

それが役立つことを願っています

于 2012-07-30T15:44:32.367 に答える
0

AFKissXMLRequestOperationは非同期操作であると思うので、successブロック内の応答で必要なことを実行する必要があります。応答処理を個別に維持したい場合は、成功ブロックで別の関数を呼び出すことができます。応答を別のクラスに返す必要がある場合は、独自のデリゲートプロトコル/プロパティを設定するか、ブロックを自分で使用することで、それを行うことができます。

デリゲートプロトコル:

@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!");
}];
于 2012-07-30T15:47:32.560 に答える