ios - 如何在外面取得AFNetworking的block里的数据
本文介绍了ios - 如何在外面取得AFNetworking的block里的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
写了一个方法需要返回值,但是需要返回的值在afnetworking的block回调里,
- (NSString *)correctShiftWithLongitude:(NSString *)lat latitude:(NSString *)lon {
NSDictionary *params = @{
@"lon" : lon, // 原始经度
@"lat" : lat, // 原始纬度
};
__block NSString *longitude; // __block不管用,静态变量也不管用
[self.manager POST:URL parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSDictionary *locDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
longitude = [locDictionary objectForKey:@"lon"]; // 纠正后经度
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@", error);
}];
NSLog(@"%@", longitude); // longitude一直为空,请问如何在AFN的block回调里修改外部数据,或者说如何在block外输出数据?
// 返回值一直为空
return longitude;
}
代码如上,longitude一直为空,请问如何取得AFN的block里的数据,或者说如何在AFN的block外输出数据?
解决方案
你这边不好直接return回去,你是异步的,你可以异步block回去。比如,可以改成这样的。
- (void)correctShiftWithLongitude:(NSString *)lat latitude:(NSString *)lon finishBlock:(void(^)(NSString *longitude, NSError *error))finishBlock
{
NSDictionary *params = @{
@"lon" : lon, // 原始经度
@"lat" : lat, // 原始纬度
};
__block NSString *longitude; // __block不管用,静态变量也不管用
[self.manager POST:URL parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSDictionary *locDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
longitude = [locDictionary objectForKey:@"lon"]; // 纠正后经度
if (finishBlock)
{
finishBlock(longitude, nil);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@", error);
if (finishBlock)
{
finishBlock(nil, error);
}
}];
}
这篇关于ios - 如何在外面取得AFNetworking的block里的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文