自己实现网易新闻头条遇到的问题__坐标错误,上啦刷新下拉加载崩溃
2015-08-15 22:37
531 查看
----------------------------------------------------------------------------------------------------------------布局遇到的问题--------------------------------------------------------------------------------------------------
完成布局之后可以通过假数据验证坐标正确与否. 懒加载是get方法所以除了分配内存的适合用self.实例变量名来完成[这个时候用的就是get方法,所以再给其他属性做设置的时候就不能在重复调用属性的get方法了.应该用_实例变量名],eg:
但是注意,给Cell初始化的时候必须
------------------------------------------------------------------------------------------------------------坐标错误遇到的问题------------------------------------------------------------------------------------------------
今天遇到我设置某个cell上label坐标高度的错误导致整个cell出现的位置非常靠后,这个时候如果改变几次返回cell高度,发现显示Cell的个数不一样就可以想到是cell高度的问题
-------------------------------------------------------------------------------------------------------上拉刷新 拉下加载崩溃-----------------------------------------------------------------------------------------------
清空数据的时机不对,我们只有保证数据被请求到了之后再去清空数组,数组才不会越界,当然也可以在返回Cell的那个代理方法加判断,但是这种方法我不会,还有一种方法就是新定义一个临时数组完成数组的重指向,这个时候一定不能忘了给临时数组分配内存.
-------------------------------------------------------------------------------------------------------第三方网络请求的步骤-----------------------------------------------------------------------------------------------
初始化第三方请求:10. 创建网络请求对象 2 开始进行网络请求 [当请求到数据的时候停止刷新操作,清除原来的数据(数组重指向可忽略此步)]
Operation:
1 创建网络请求对象 2 开始网络请求 停止刷新操作 清除原来的数据 进行数据解析 进行数据提取 3 开启网络请求:
因为有可能因为网速的缘故,数据请求不到,那么也可以在cell for row这个代理方法的前面加上一句
完成布局之后可以通过假数据验证坐标正确与否. 懒加载是get方法所以除了分配内存的适合用self.实例变量名来完成[这个时候用的就是get方法,所以再给其他属性做设置的时候就不能在重复调用属性的get方法了.应该用_实例变量名],eg:
- (UILabel *)detailTitle { if (!_detailTitle) { self.detailTitle = [[[UILabel alloc]initWithFrame:CGRectMake(self.title.frame.origin.x, 3*SPACE +self.title.frame.size.height, self.title.frame.size.width - 10*SPACE, HEIGHT - SPACE - self.title.frame.size.height )]autorelease]; _detailTitle.font = [UIFont systemFontOfSize:15]; _detailTitle.textColor = [UIColor lightGrayColor]; _detailTitle.numberOfLines = 0; _detailTitle.lineBreakMode = NSLineBreakByWordWrapping; } return [[_detailTitle retain]autorelease]; }
但是注意,给Cell初始化的时候必须
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { [self.contentView addSubview:self.picture]; [self.contentView addSubview:self.title]; [self.contentView addSubview:self.detailTitle]; } return self; }因为如果这个时候依旧用_ ,则会造成一种现象 ,就是整个过程都没有调用属性的get方法,会导致属性没有被初始化,接下来的现象就是这个cell不显示.
------------------------------------------------------------------------------------------------------------坐标错误遇到的问题------------------------------------------------------------------------------------------------
今天遇到我设置某个cell上label坐标高度的错误导致整个cell出现的位置非常靠后,这个时候如果改变几次返回cell高度,发现显示Cell的个数不一样就可以想到是cell高度的问题
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { }
-------------------------------------------------------------------------------------------------------上拉刷新 拉下加载崩溃-----------------------------------------------------------------------------------------------
清空数据的时机不对,我们只有保证数据被请求到了之后再去清空数组,数组才不会越界,当然也可以在返回Cell的那个代理方法加判断,但是这种方法我不会,还有一种方法就是新定义一个临时数组完成数组的重指向,这个时候一定不能忘了给临时数组分配内存.
-------------------------------------------------------------------------------------------------------第三方网络请求的步骤-----------------------------------------------------------------------------------------------
初始化第三方请求:10. 创建网络请求对象 2 开始进行网络请求 [当请求到数据的时候停止刷新操作,清除原来的数据(数组重指向可忽略此步)]
AFHTTPRequestOperationManager *manager = [[[AFHTTPRequestOperationManager alloc]init]autorelease]; //开始加载信息 [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { //停止加载操作 [self.tableView footerEndRefreshing]; //数据处理(该方法返回的数据是已经解析好的数据) [self dealDataWithDictionary:responseObject];
Operation:
1 创建网络请求对象 2 开始网络请求 停止刷新操作 清除原来的数据 进行数据解析 进行数据提取 3 开启网络请求:
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@" "]]]autorelease]; //2:开始进行网络请求 [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { //停止刷新操作 [self.tableView headerEndRefreshing]; //清除原来的数据 [self.datasource removeAllObjects]; //进行数据解析 NSMutableDictionary *newsDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; //进行数据提取 [self dealDataWithDictionary:newsDic];
因为有可能因为网速的缘故,数据请求不到,那么也可以在cell for row这个代理方法的前面加上一句
if (indexPath.row > self.dataSource.count) { return nil; }
相关文章推荐
- AndroidStudio中代码混淆以及打包操作
- RMQ区间求最值
- 使用Windows EFS进行文件加密
- 面向对象编程js
- TCP连接建立系列 — 客户端发送SYN段
- Apache POI Copy Cell
- HDU 2100Lovekey
- AndoridManifest InstallLocation 使用说明
- TCP连接建立系列 — 客户端发送SYN段
- 交叉编译ffmpeg到beaglebone balck
- Redhat Linux 7 命令关闭防火墙
- 【leetcode每日一题】NO109.Convert Sorted List to Binary Search Tree
- Near-duplicate Detection(文章相似度计算)
- 华为OJ平台试题 —— 排序:字符统计
- 对于a标签点击之后可以发邮件和打电话的功能实现
- 前端开发时经常会被浏览器缓存搞得头大,apache设置一下就好了
- 算法(一)
- EmguCV+Kinect2.0获取高清面部帧
- 21. Function 对象
- hdu 5391 Zball in Tina Town (数学)