ios-IOS中如何将开源库AFNetworking的GET函数中获取的数据,在函数体外利用呢?

问题描述

IOS中如何将开源库AFNetworking的GET函数中获取的数据,在函数体外利用呢?

代码如下,如何在GET函数外获取到在其内解析到的数据,从而加以利用呢?

 //
//  ViewController.m
//  1
//
//  Created by   on 16-2-2.
//  Copyright (c) 2016年  . All rights reserved.
//

#import "ViewController.h"
#import "AFHTTPRequestOperationManager.h"
#import "XiaHuaModel.h"
#import "XiaoHuaCell.h"

@interface ViewController ()
{
   __block NSMutableArray *arrData;
    UITableView *xiaoHuaView;
}
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *url = @"http://localhost/json/2.json";

    xiaoHuaView = [[UITableView alloc]initWithFrame:self.view.bounds];
    xiaoHuaView.delegate = self;
    xiaoHuaView.dataSource = self;
    [self.view addSubview:xiaoHuaView];

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSError *err= nil;
        //XiaHuaModel用于解析JSON数据为对象,它继承自第三方开源库JSONModel
        XiaHuaModel *xiaHua =  [[XiaHuaModel alloc]initWithDictionary:(NSDictionary *)responseObject error:&err];
        NSArray *detailArray = xiaHua.detail;
        arrData = [NSMutableArray arrayWithArray:detailArray];
        // detailModel *detail = [detailArray objectAtIndex:indexPath.row];
        // NSDictionary *detailDictionary = [detail toDictionary];
        NSLog(@"AFNetworking GET 函数内部数据为: %d",arrData.count);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error...%@",error);
    }];

     NSLog(@"AFNetworking GET 函数外部数据为: %d",arrData.count);

}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"numberOfRowsInSection函数中的数据为 : %d",arrData.count);
        //此处期望获得值为2,但是却得到0
    return arrData.count;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 130;
}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 5;
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 3;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *Identifier = @"XiaoHuaCell";
    XiaoHuaCell *cell = (XiaoHuaCell *)[tableView dequeueReusableCellWithIdentifier:Identifier];
    if (!cell) {
        cell = [[XiaoHuaCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Identifier];
    }

    return cell;

}

@end

**执行的结果为(执行的顺序与返回值不知是如何得到的,请指教)

2016-02-06 05:35:36.347 1[1945:60b] AFNetworking GET 函数外部数据为: 0
2016-02-06 05:35:36.365 1[1945:60b] numberOfRowsInSection函数中的数据为 : 0
2016-02-06 05:35:36.481 1[1945:60b] AFNetworking GET 函数内部数据为: 4
**

该段代码中 http://localhost/json/2.json 中的数据如下:

  {
  "status": "000000",
  "desc": null,
  "detail": [
    {
      "id": 40052,
      "xhid": 40052,
      "author": "不要抓我",
      "content": "有多少人,当年在学校为了夜里出去上网锯窗户过?有多少人翻墙的时候后跳到臭水沟了?",
      "picUrl": "",
      "status": "1"
    },
    {
      "id": 40051,
      "xhid": 40051,
      "author": "咸鱼翻跟头",
      "content": "一个人在外面打工,手伤了缝了5针也不敢跟家人说,怕她们担心,一个人硬撑着,可心里怎么那么难过啊!",
      "picUrl": "http://img.appd.lengxiaohua.cn/2016/01/31/bd82974300ced_o.jpg",
      "status": "1"
    }
  ]
}

解决方案

     [manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSError *err= nil;
        //XiaHuaModel用于解析JSON数据为对象,它继承自第三方开源库JSONModel
        XiaHuaModel *xiaHua =  [[XiaHuaModel alloc]initWithDictionary:(NSDictionary *)responseObject error:&err];
        NSArray *detailArray = xiaHua.detail;
        arrData = [NSMutableArray arrayWithArray:detailArray];
        // detailModel *detail = [detailArray objectAtIndex:indexPath.row];
        // NSDictionary *detailDictionary = [detail toDictionary];
        NSLog(@"AFNetworking GET 函数内部数据为: %d",arrData.count);
                //注意这一句
                [xiaoHuaView reloaddata];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error...%@",error);
    }];

     NSLog(@"AFNetworking GET 函数外部数据为: %d",arrData.count);

其实也就是在你Get到数据之后,调用一下tableview的刷新,tableview就会重新加载数据,那么你新的数据就能被tableview展示出来了

解决方案二:

问题的关键是get是异步的,你需要在主程序等待它执行完,你主程序可以做循环,get函数将结果放入全局变量,主程序获取。

解决方案三:

你都知道block了 就要理解异步编程的思想 你可以再调用前定义变量 这样block中可以捕获这个变量 从而把数据从get中返回数据给变量

时间: 2024-08-04 06:28:14

ios-IOS中如何将开源库AFNetworking的GET函数中获取的数据,在函数体外利用呢?的相关文章

Linux 后台开发工作中常用的开源库

后台开发,语言主要是 c 和 c++ , 这里简单罗列一下工作中用的很频繁的那些开源软件 1. OpenSSL openssl OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. 下载地址: https://www.openssl.org/source/ 2.TinyXML tinyxml 简单,高效,灵活的一套操作 XML 文件的开源库. 下载地址: http://www.grinninglizar

5分钟用Jitpack发布开源库

项目开发中会用到很多开源库,他们一般通过Maven/Gradle依赖进来的. 演而优则唱,开发越来越溜以后, 你是否也蠢蠢欲动,想发布自己的库呢. 下面介绍怎么通过Jitpack进行发布Github代码,真的非常非常简单,几分钟搞定~ 为什么用Jitpack 现在Maven的两个主要仓库是: 1)Maven center2)jcenter 他们使用面很广, 家大业大,所以带来的相应的问题: 1)发布过程比较麻烦,需要验证和审核2)发布的时候需要Group唯一,这个group得是一个域名.而现在很

一个使用FFmpeg库读取3gp视频的例子-Android中使用FFmpeg媒体库(三)

原文:http://doandroid.info/?p=497 在续系列文章在32位的Ubuntu 11.04中为Android NDK r6编译FFmpeg0.8.1版-Android中使用FFmpeg媒体库(一)和在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库(二)文章后,本文将根据github中churnlabs的一个开源项目,来深入展开说明如何使用FFmpeg库进行多媒体的开发. 本文中的代码来自于https://github.com/

GitHub上那些值得一试的Java开源库

文章转自<http://www.chinarobots.cn/XingYeDongTai/952.html>,感谢作者分享! ----------------------------------------------------------------------------------------- 作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,Spring,Hibernate等等.除了这些,你可能还会fork或Star一些

27个提升效率的iOS开源库推荐

DZNEmptyDataSet(UI,空表格视图解算器) PDTSimpleCalendar(UI,drop-in日历组件) MagicalRecord(实施活跃记录模式的Core Data助手) Chameleon(UI,色彩框架) Alamofire(Swift 网络) TextFieldEffects (UI,自定义外观的文本区域) GPUImage(快速图片处理) iRate(获取用户评价) GameCenterManager(快速管理游戏中心) PKRevealController 2

10个有用的第三方iOS开源库

CocoaPods 地址:https://github.com/CocoaPods/CocoaPods 教程:http://www.raywenderlich.com/12139/introduction-to-cocoapods 描述:可以很方便的管理第三方库,清晰知道项目引用的库有哪些和它们的版本. CocoaAsyncSocket 地址:https://github.com/robbiehanson/CocoaAsyncSocket 简述: 处理TCP/UDP 链接的开源库. Appira

iOS界面布局之四——使用第三方库Masonry进行autolayout布局

iOS界面布局之四--使用第三方库Masonry进行autolayout布局 一.引言         在前面博客,我们讨论了使用iOS原生的框架代码来进行autolayout布局.在使用中,我们会发现,无论是代码量还是结构的清晰度,都十分不能让我们满意,在storyBoard中只需要几条线就可以搞定的事情,用代码缺要写冗余的一大堆.并且有些时候,故事版并不能解决所有问题,某些控件必须我们手写,这样的话,我们就不得不进行代码的autolayout布局,幸运的是,Masonry可以帮助我们轻松愉快

iOS 中由谓词引发的正则血案正在破案中

iOS 中由谓词引发的正则血案正在破案中 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 谓词可以解析正则,还有几个iOS类可以实现同样的功能. 当时研究时,觉得无比兴奋,为什么现在回想起来,没

Android Studio项目中导入开源库的方法_Android

前两天,谷歌发布了Android Studio 1.0的正式版,也有更多的人开始迁移到Android Studio进行开发.然而,网上很多的开源库,控件等还是以前的基于Eclipse进行开发,很多人不知道怎么导入到自己的基于Android Studio项目中来,微博上也有人私信我,让我来写写,正好今天回来的比较早,就写写吧.主要介绍一下常见的一些导包的场景. 前言 复制代码 代码如下: --project   //项目目录   |   build.gradle  //项目的gradle配置文件