0

AFXMLRequestOperation素晴らしいのメソッドを使用していAFNetworkingます。私が使用したいのは、次のものを使用することですが、独自のメソッドを独自の完了コールバックでラップします。

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://api.flickr.com/services/rest/?method=flickr.groups.browse&api_key=b6300e17ad3c506e706cb0072175d047&cat_id=34427469792%40N01&format=rest"]];
AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
  XMLParser.delegate = self;
  [XMLParser parse];
} failure:nil];
[operation start];

以下のようなことは可能でしょうか?

+ (void)makeRequestWithURL:(NSURL *)url completion:(void (^)(BOOL finished))completion {

    NSURLRequest *request = [NSURLRequest requestWithURL:url]];
    AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
        XMLParser.delegate = self;
        [XMLParser parse];
    } failure:nil];
    [operation start];

    if (completion) {
        // How can I call my cometion block when AFXMLRequestOpersation is finished?
    }

}

次に、次を使用して呼び出します。

[MyClass makeRequestWithURL:url completion^(BOOL finished){
        if (finished) {
            NSLog(@"AFNetworking Finished");
        }
}];

AFNetworkingMY 完了ブロックで がいつ終了したかを知ることはできますか?

4

2 に答える 2

2

成功ブロックで完了ブロックを呼び出すだけです。

+ (void)makeRequestWithURL:(NSURL *)url completion:(void (^)(BOOL finished))completion {

    NSURLRequest *request = [NSURLRequest requestWithURL:url]];
    AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
        XMLParser.delegate = self;
        [XMLParser parse];
        // call completion block here
        if (completion) {
          completion(YES);
        }

    } failure:nil];
    [operation start];
}

の障害ブロックも実装する必要がありAFXMLRequestOperationます。

于 2012-11-04T23:25:17.477 に答える
0

結果に関係なく完了ブロックが実行され、成功/失敗を示す BOOL が次のようになると仮定します。

NSURLRequest *request = [NSURLRequest requestWithURL:url]];
AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
  XMLParser.delegate = self;
  [XMLParser parse];

  if (completion) {
    completion(YES);
  }

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParse) {

  if (completion) {
    completion(NO);
  }

}];
[operation start];
于 2012-11-04T23:28:48.103 に答える