iOS开发 AFNetWorking封装的方法,responseObject返回值赋值问题
@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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
楼主成功啦吗?,我现在也是需要把值传出来,但是不想用通知做,好像afn同步请求并没有,所以有点头疼。setCompletionBlockWithSuccess中使用plist文件持久化数据是怎么做的?
谢谢您的回答!但我现在是将这段代码封装成一个类,然后在其他类中使用下载的json数据。所以我想直接把responseObject赋值给self.dic然后返回值。但是不管是self.dic还是responseObject出了setCompletionBlockWithSuccess方法后就为null了,我的返回值也就为null。我也尝试在主线程中赋值,还是为空。希望您有空能再指点指点,谢谢!
你的写法是有问题的,网络请求是用的异步处理,UI更新应该在setCompletionBlockWithSuccess后回调到主线程进行更新
或者你用同步请求,这样会阻塞主线程