【问题标题】:Integrate AFNetworking AFXMLRequestOperation into my own method with block completion callback通过块完成回调将 AFNetworking AFXMLRequestOperation 集成到我自己的方法中
【发布时间】:2012-11-04 23:05:36
【问题描述】:

我正在使用奇妙的AFNetworkingAFXMLRequestOperation 方法。我想使用以下内容,但使用我自己的完成回调将我自己的方法包裹起来。

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 在我的完成块中何时完成吗?

【问题讨论】:

  • 完成应该代表什么——成功还是失败?
  • 假设代表成功。

标签: objective-c ios objective-c-blocks afnetworking


【解决方案1】:

只需在成功块中调用您的完成块:

+ (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的失败块。

【讨论】:

    【解决方案2】:

    假设无论结果如何,都会运行完成块,并且 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];
    

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      相关资源
      最近更新 更多