如何使用AFJSONRequestOperation返回响应对象 [英] How to return a response object using AFJSONRequestOperation

查看:182
本文介绍了如何使用AFJSONRequestOperation返回响应对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 AFJSONRequestOperation 获取天气数据。问题是查询完成后我无法返回对象。

I'm trying to get weather data by using AFJSONRequestOperation. The problem is I can't return the object when the query is done. Is there anyone know how to do that?

我当前的实现是

- (NSDictionary *)getCityWeatherData:(NSString*)city
{
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://free.worldweatheronline.com/feed/weather.ashx?key=xxxxxxxxxxxxx&num_of_days=3&format=json&q=%@", city]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        NSDictionary *data = [[JSON objectForKey:@"data"] objectForKey:@"weather"];
        return data;
    } failure:nil];
    [operation start];
}


推荐答案

您有一种方法在某种意义上可以做到这一点。不必使用传统的返回方法,您可以让调用者将一个块作为参数传递,然后可以在成功和失败 AFJSONRequestOperation 块内调用该块。

There is a way that you can do this, in a sense. Instead of having a traditional return method you can have the caller pass a block as a parameter, then you can call back to this block inside your success and failure AFJSONRequestOperation blocks.

以下是我的一些代码示例:

Here's an example from some of my code:

- (void)postText:(NSString *)text
     forUserName:(NSString *)username
  withParameters:(NSDictionary *)parameters
       withBlock:(void(^)(NSDictionary *response, NSError *error))block
{
    NSError *keychainError = nil;
    NSString *token = [SSKeychain passwordForService:ACCOUNT_SERVICE account:username error:&keychainError];

    if (keychainError) {
        if (block) {
            block([NSDictionary dictionary], keychainError);
        }
    } else {
        NSDictionary *params = @{TEXT_KEY : text, USER_ACCESS_TOKEN: token};
        [[KSADNAPIClient sharedAPI] postPath:@"stream/0/posts"
                                  parameters:params
                                     success:^(AFHTTPRequestOperation *operation, id responseObject)
         {
             if (block) {
                 block(responseObject, nil);
             }
         }
                                     failure:^(AFHTTPRequestOperation *operation, NSError *error)
         {
             if (block) {
                 block([NSDictionary dictionary], error);
             }
         }];
    }
}

我这样称呼它:

 [[KSADNAPIClient sharedAPI] postText:postText
                          forUserName:username
                       withParameters:parameters
                            withBlock:^(NSDictionary *response, NSError *error)
 {
        // Check error and response
 }

这篇关于如何使用AFJSONRequestOperation返回响应对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆