如何在类方法中返回AFNetworking中的响应对象?

时间:2014-04-25 17:03:23

标签: objective-c afnetworking

如果这个问题太基础我很抱歉,但我似乎无法在网上找到答案。

我想获取JSON结果并使用下面的类方法返回它们。但正如您所看到的,通过在块方法中获取JSON,我无法返回结果。

从块内部方法中将它们作为NSDictionary返回的正确方法是什么,还是有其他方法来简化它?

+ (NSDictionary *) fetchtPostsCount:(NSString *) count
                              page: (NSString *) page  {
  NSDictionary *requestParameter = [[NSDictionary alloc] initWithObjectsAndKeys:count, @"count", page, @"page", nil];

  [[self sharedClient] GET:@"get_recent_posts"
                parameters:requestParameter success:^(NSURLSessionDataTask *task, id responseObject) {
                  NSLog(@"%@", [responseObject objectForKey:@"posts"]);

                } failure:^(NSURLSessionDataTask *task, NSError *error) {
                  NSLog(@"%@", error);
                }];


  return nil;
}

1 个答案:

答案 0 :(得分:1)

AFNetworking在不同的线程上执行请求,并在完成后调用成功或失败块。从概念上讲,您可以想象您的fetchPostsCount方法已经完成,并在请求完成时返回其值。

您几乎肯定希望它以这种方式工作。在另一个线程上运行请求而不是等待它,允许您的主UI线程继续处理事件和呈现屏幕更新。你不想妨碍这些事情,或者用户(和iOS)会不高兴。

但是,如果您坚持在返回之前等待请求完成,您可以设置一个标志来监视请求的状态,然后等待该标志,直到请求完成:

BOOL requestComplete = NO;
id requestResponseObject = nil;
[[self sharedClient] GET:@"get_recent_posts"
            parameters:requestParameter success:^(NSURLSessionDataTask *task, id responseObject) {
              requestResponseObject = responseObject;
              requestComplete = YES;
              NSLog(@"%@", [responseObject objectForKey:@"posts"]);

            } failure:^(NSURLSessionDataTask *task, NSError *error) {
              requestComplete = YES;
              NSLog(@"%@", error);
            }];
while (!requestComplete)
{
    // Tie up the thread, doing nothing...
}
// Proceed