我有一个包含AFNetworking
块的类方法,其中我想返回一个字典变量,代码如下所示:
+(NSMutableDictionary*) getFromUrl:(NSString*)url parametersPassed:(NSDictionary*)parameters;
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
__block NSMutableDictionary *resultarray;
[manager GET:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSLog(@"JSON: %@", responseObject);
NSMutableDictionary *resultarrayTwo = (NSMutableDictionary *)responseObject;
resultarray = resultarrayTwo;
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"Error: %@, %@", error, operation.responseString);
UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"Message" message:@"Try again" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alertView show];
}];
return resultArray;
}
如何在这里返回resultArray,由于控制流程的不同,它在此处不返回任何内容。
我对Objective C块没有多少了解。等待你的帮助。
谢谢。
答案 0 :(得分:2)
使用Completion Blocks
+(void)getFromUrl:(NSString*)url parametersPassed:(NSDictionary*)parameters completion:(void (^) (NSMutableArray *values))completion;
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSLog(@"JSON: %@", responseObject);
NSMutableDictionary *resultarray = (NSMutableDictionary *)responseObject;
completion(resultarray);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"Error: %@, %@", error, operation.responseString);
UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"Message" message:@"Try again" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alertView show];
completion(nil);
}];
}
并调用函数
[YourClass getFromUrl:url parametersPassed:params completion:^(NSMutableArray *values) {
NSLog(@"%@",values);
}];
<强>更新强> 删除了使用的额外数组。
希望这有帮助。
答案 1 :(得分:1)
网络调用本质上是异步的,因此使用此方法返回其结果可能不是正确的思考方式,因为它意味着您进行同步网络调用。
让方法改为使用块参数,并在稍后的时间点从AFNetworking完成块执行该块的结果。
答案 2 :(得分:0)
在获得GET调用的响应之前,它将执行下一行。这就是为什么你没有数据进入Array。
您可以在成功和失败块中调用委托方法。这是最好的解决方案。