如果这个问题太基础我很抱歉,但我似乎无法在网上找到答案。
我想获取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;
}
答案 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