1.我用AFNetworking
与服务器交互,执行的方法中,参数success
和failure
使用了block
,请看如下代码:
__block NSString* res;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parametersDic = @{@"account" : account, @"pass" : password};
[manager POST:@"http://127.0.0.1/login.php" parameters:parametersDic
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSLog(@"JSON: %@", responseObject);
NSString *status = responseObject[@"status"];
if ([status isEqualToString:@"success"])
{
NSLog(@"登录成功!");
NSString *token = responseObject[@"info"][@"token"];
res = token;
}
else if ([status isEqualToString:@"erro"])
{
NSLog(@"登录失败!");
NSString *info = responseObject[@"info"][@"info"];
res = info;
NSLog(@"info:%@", info);
}
NSLog(@"注册函数中: %@", res);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"Error: %@", error);
res = @"ERROR!!!";
}];
//sleep(2);
return res;
2.问题来了,我想利用一开始定义的NSString *res;
来获取解析得到的数据,然后return res;
来作为函数返回值。
3.但是参数使用了block
似乎是新开了一个线程,以success
为例,其中的token
数据赋值给res
后,只能作用于block
的那对花括号中,最后返回的return res
值为nil
。
4.我一开始以为是网络传输延迟没拿到数据,然后sleep(2);
后,依旧res
是nil
,然后我就想可能真的是线程问题。
5.我就想知道如何才能获取success
和failure
这两个block里面解析到的数据,然后作为函数返回值用return res;
返回。望有人能解答,谢谢! : )
1.用runloop
2.GCD group
见ios 想问一个很简单的异步问题
3.修改方法,直接返回block