ios-iOS网络请求数据问题---本人初学,勿喷

问题描述

iOS网络请求数据问题---本人初学,勿喷

如题。
使用AFN请求数据时,页面不显示数据,debug的时候发现dataArray数组没有值,但是调用testJson这个方法的时候,的确是请求到有数据的,并且已经将数据解析并添加到dataArray这个数组中的啊,不知道为什么到viewDidLoad这个方法中数组dataArray就是为空。不知道是我写的代码的加载顺序有问题还是项目的哪个地方需要配置下?求高手帮忙看下。。。
#import "ViewController.h"
#import "AFNetworking.h"
#import "Model.h"
#import "Cell.h"
@interface ViewController ()

@property (nonatomic, weak) UITableView *tableView;
@property (nonatomic,strong) NSMutableArray *dataArray;
@property (nonatomic,copy) NSString *url;
@end

@implementation ViewController

  • (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    UITableView *tableView = [[UITableView alloc]init];
    tableView.frame = CGRectMake(0, 0, 375, 667);
    [self.view addSubview:tableView];
    self.tableView = tableView;
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.url = @"http://api.douban.com/v2/movie/top250";
    self.dataArray = [[NSMutableArray alloc] init];
    //注册cell
    [self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];
    [self testJSON];
    }

-(void)testJSON{
//请求数据的地址
NSString *path = self.url;
//创建管理类
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//设置数据二进制,数据格式默认json
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

//利用方法请求数据
[manager GET:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];

    NSArray *movieArray = dic[@"subjects"];

    for (NSDictionary *dict  in movieArray)
    {
        Model *model = [[Model alloc] init];
        model.movieName = dict[@"title"];
        model.movieYear = dict[@"year"];
        model.movieImage = dict[@"images"][@"large"];

        [self.dataArray addObject:model];
    }
    //刷新表
    [_tableView reloadData];

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

}
#pragma mark ---------数据源方法-------

  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.dataArray.count;
    }
  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    Model *model = self.dataArray[indexPath.row];
    static NSString *ID = @"ID";
    Cell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
    cell = [[Cell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    cell.name.text = model.movieName;
    cell.year.text = model.movieYear;

    return cell;
    }

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

@end


解决方案

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];

static NSString *ID = @"ID";
Cell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

你这两个地方的cellReuseIdentifier都不一样,cellForRowAtIndexPath连cell都取不到。

解决方案二:

你在viewdidload里面查看dataArray肯定为空啊,viewdidload只执行一次,异步请求的话你是没机会在viewdidload里面查看到dataArray的数据的。
看了一下,数据请求是没问题的,问题估计是在cell填充数据那里。

建议你按照下列步骤排查:

0.tableView reloadData之前打断点观察

1.检查tableView: numberOfRowsInSection:查看行数

2.cell填充数据的地方(估计是创建的cell不对,你创建了系统默认的几种之一)

解决方案三:

http://www.oschina.net/question/2296401_225963

时间: 2024-09-22 19:52:10

ios-iOS网络请求数据问题---本人初学,勿喷的相关文章

iOS开发网络篇—数据缓存

iOS开发网络篇-数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序响应速度不够快 解决上面的问题,一般考虑对数据进行缓存. 二.缓存 为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存) 第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据. 缓存数据的过程 当服务器返回数据时,需要做以下步骤 (1)使用服务器

iOS 异步网络请求 和 把 同步网络请求放在子线程有什么区别?

问题描述 iOS 异步网络请求 和 把 同步网络请求放在子线程有什么区别? iOS 异步网络请求 和 把 同步网络请求放在子线程有什么区别? 解决方案 那就是异步和同步的问题咯,,异步的话是不会等待请求完成能继续执行下面的程序,,而同步会等待请求的完成,在继续执行下面的 解决方案二: 同步放子线程效果跟异步达到的类似.只是一个是API原生支持,一个是你自己代码来实现 解决方案三: 同步放子线程效果跟异步达到的类似.只是一个是API原生支持,一个是你自己代码来实现 解决方案四: 同步放子线程效果跟

ios 代码 视频-rtmp协议的数据流,在iOS中怎么请求数据,然后怎么播放;求发demo

问题描述 rtmp协议的数据流,在iOS中怎么请求数据,然后怎么播放:求发demo 要做一款直播类的app这个协议以前没用过:在github没找到第三方:很多地方搜了也只说原理:没有代码:求大牛发个demo,感激不尽 解决方案 上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢! 解决方案二: 开源项目 rtmp-video-player-for-ios

iOS判断网络请求超时的方法_IOS

 本文介绍了iOS判断网络请求超时的方法,代码具体如下: + (AFHTTPRequestOperation *)requestOperationWithUrl:(NSString *)url requetMethod:(NSString *)method paramData:(NSDictionary *)aParamData constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block succes

Android 经典笔记之八:网络请求数据基础介绍

关于网络请求数据总结 目录介绍 1.Http请求与响应 1.1 Http请求包的结构 1.2 HTTP响应包结构 2.Http请求方式 3.Get和Post的比较 3.1 get请求 3.2 post请求 3.3 其他区别 3.4 网络心声 4.Http响应方式 5.同步和异步 6.Http缓存机制讲解 6.1 request请求字段含义 6.2 response响应字段含义 6.3 缓存机制逻辑图 0.本人写的综合案例 案例 说明及截图 模块:新闻,音乐,视频,图片,唐诗宋词,快递,天气,记事

iOS - ASIHTTPRequest 网络请求

前言 使用 iOS SDK 中的 HTTP 网络请求 API,相当的复杂,调用很繁琐,ASIHTTPRequest 就是一个对 CFNetwork API 进行了封装,并且使用起来非常简单的一套 API,外号 "HTTP终结者",用 Objective-C 编写,运行效率很高,可以很好的应用在 Mac OS X 系统和 iOS 平台的应用程序中,ASIHTTPRequest 适用于基本的 HTTP 请求,和基于 REST 的服务之间的交互.可惜作者早已停止更新,有一些潜在的 BUG 无

iOS - AFNetworking 网络请求

前言 在 iOS 开发中,一般情况下,简单的向某个 Web 站点简单的页面提交请求并获取服务器的响应,用 Xcode 自带的 NSURLConnection 是能胜任的.但是,在绝大部分下我们所需要访问的 Web 页面则是属于那种受到权限保护的页面,并不是有一个简单的 URL 可以访问的.这就涉及到了 Session 和 Cookie 的处理了,在此时使用 NSURLConnection 也是能够达到要求的,只是其中处理起来的复杂度和难度就提升了.为了更好的处理向 Web 站点的请求,包括处理

iOS - NSURLSession 网络请求

前言 NS_CLASS_AVAILABLE(NSURLSESSION_AVAILABLE, 7_0) @interface NSURLSession : NSObject @available(iOS 7.0, *) public class NSURLSession : NSObject 1.NSURLSession 在 iOS9.0 之后,以前使用的 NSURLConnection 过期,苹果推荐使用 NSURLSession 来替换 NSURLConnection 完成网路请求相关操作.

iOS - NSURLConnection 网络请求

前言 @interface NSURLConnection : NSObject class NSURLConnection : NSObject DEPRECATED: The NSURLConnection class should no longer be used. NSURLSession is the replacement for NSURLConnection 从 iOS 9 开始 NSURLConnection 的大部分方法被废弃. 1.NSURLConnection NSUR