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");
        }
}];

我可以知道AFNetworking我的完成块何时完成吗?

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 回答