您的位置:首页 > 其它

自己实现网易新闻头条遇到的问题__坐标错误,上啦刷新下拉加载崩溃

2015-08-15 22:37 531 查看
----------------------------------------------------------------------------------------------------------------布局遇到的问题--------------------------------------------------------------------------------------------------

完成布局之后可以通过假数据验证坐标正确与否. 懒加载是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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: