iOS开发 AFNetWorking封装的方法,responseObject返回值赋值问题

发布于 2021-11-26 14:49:19 字数 1515 浏览 918 评论 3

@property (nonatomic, strong) NSDictionary *dic;


#pragma mark - 从网络获取json数据
- (NSDictionary *)getJsonData{
   
    NSString *urlStr                  = @"http://api.worldweatheronline.com/free/v2/weather.ashx?q=chengdu&num_of_days=7&format=json&tp=6&key=5fc3a5873e9bdb5bbf8116ea3aac5";
    NSURL *url                        = [NSURL URLWithString:urlStr];
    NSURLRequest *request             = [NSURLRequest requestWithURL:url];
    
    //使用AFNetworking解析json数据
    //实例化http操作请求
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    
    //设定解析器
    operation.responseSerializer      = [AFJSONResponseSerializer serializer];
    
    //下载数据并解析
     [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
           
            //json数据全局化
            self.dic = (NSDictionary *)responseObject;
            
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"解析出错:%@",error);
        }];
        
    [operation start];
   
    return self.dic;
}
    我已经提升dic成属性了,为什么返回的self.dic为空?

    自己测试发现 setCompletionBlockWithSuccess语句闭包是在getJsonData结束后才调用,这样我怎么能接收 responseObject的值啊?希望朋友能指点迷津,谢谢!!

**************8.27补充**************

    目前我的解决方法是在setCompletionBlockWithSuccess中使用plist文件持久化数据,然后其他类用的时候在获取。不知道是否合理?请有其他方法的朋友分享下,谢谢!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

酒几许 2021-12-03 01:18:59

楼主成功啦吗?,我现在也是需要把值传出来,但是不想用通知做,好像afn同步请求并没有,所以有点头疼。setCompletionBlockWithSuccess中使用plist文件持久化数据是怎么做的?

疾风者 2021-12-02 23:20:19

谢谢您的回答!但我现在是将这段代码封装成一个类,然后在其他类中使用下载的json数据。所以我想直接把responseObject赋值给self.dic然后返回值。但是不管是self.dic还是responseObject出了setCompletionBlockWithSuccess方法后就为null了,我的返回值也就为null。我也尝试在主线程中赋值,还是为空。希望您有空能再指点指点,谢谢!

刘备忘录 2021-12-01 21:57:32

你的写法是有问题的,网络请求是用的异步处理,UI更新应该在setCompletionBlockWithSuccess后回调到主线程进行更新

或者你用同步请求,这样会阻塞主线程

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文