百思不得姐(第四天)

不得不说,自己抓数据写Model真的是件痛苦的事,怪不得官方要给API,不然都自己抓数据真的要累死.

看看今晚做到的效果(已经能够请求数据展示出来了)

最耗时间的操作应该就是根据json来写Model了

写了这么大一堆.

思路:

由于一共有图片、段子、视频、音频4种大分类,但每个分类都有固定的东西,例如用户头像、发帖时间这些都是固定有的,还有下面的点赞点踩。所以可以画个基类的xib

如图,然后分别画其他类型的XIB

这些XIB画好后,在使用的时候根据判断返回的type字段来比较,例如返回字段是图片类型,那么图片类型的控件就显示出来,视频和音频的控件就hidden掉.

if ([talkModel.type isEqualToString:@"image"] || [talkModel.type isEqualToString:@"gif"]) {
        //如果类型为图片,将自己视频和音频控件隐藏,图片控件显示
        self.myVideoView.hidden = YES;
        self.myVoiceView.hidden = YES;
        self.pictureView.hidden = NO;
        self.pictureView.talkModel = talkModel;
        self.pictureView.frame = talkModel.pictureF;
    }else if ([talkModel.type isEqualToString:@"video"]) {
        //如果类型是视频,将图片和声音控件隐藏,视频控件显示
        self.pictureView.hidden = YES;
        self.myVoiceView.hidden = YES;
        self.myVideoView.hidden = NO;
        self.myVideoView.talkModel = talkModel;
        self.myVideoView.frame = talkModel.videoF;
    }else if ([talkModel.type isEqualToString:@"audio"]) {
        //如果类型是音频,将图片和视频控件隐藏,音频控件显示
        self.pictureView.hidden = YES;
        self.myVideoView.hidden = YES;
        self.myVoiceView.hidden = NO;
        self.myVoiceView.talkModel = talkModel;
        self.myVoiceView.frame = talkModel.soundF;
    }else {
        //段子类型,将所有控件都隐藏(音频、视频、图片)
        self.pictureView.hidden = YES;
        self.myVoiceView.hidden = YES;
        self.myVideoView.hidden = YES;
    }

注意点

在计算cell高度的时候,需要获取返回的height和width字段,一定要将对应的类型写对,我在写的时候将段子类型的高度写成了图片类型,导致了图片类型的高度和宽度都为0

CGFloat picH = picW * self.image.height / self.image.width;

我计算高度用了除法,这就导致了除数为0,大家都知道0是不能为除数的,但是这里Xcode也没报警告也没报错误,最后是崩了,崩的原因为

*** Assertion failure in -[UISectionRowData refreshWithSection:tableView:tableViewRowData:], /SourceCache/UIKit_Sim/UIKit-3318.16.14/UITableViewRowData.

找了好久,通过NSLog打印才发现,居然打印出了nan这种东西,我返回的明明是CGFloat,然后Google了一下,有人说可能是没有给值初始化造成的,然后细细的看,才发现了这个小问题,以后一定要注意这点了,写除法的时候一定要保证除数不能为零啊!

睡觉!

时间: 2024-10-10 06:01:53

百思不得姐(第四天)的相关文章

iOS开发——完整项目实战OC篇&百思不得姐第四天

iOS开发——完整项目实战OC篇&百思不得姐第四天 上午 一:自定义按钮使用九宫格布局 二:控件不能点击 三:获取用户点击了那个按钮 四:调整按钮内部控件的位置:主流->上下 五:不能直接使用self.navigationController中或者View中获取导航控制器 方法一: 方法二: 六:布局取整 1 // 总行数 2 3 // NSUInteger rows = sqaures.count / maxCols; 4 5 // if (sqaures.count % maxCols)

iOS开发——完整项目实战OC篇&百思不得姐第十天

百思不得姐第十天 一:设置时间的显示 显示如下 二:MJExtension类型(名字)的指定——映射 1.在模型实中 2.字典转模型中 三:常见问题 问题1:多个对一个 有时候可能会有多个属性对应一个名字的时候我们就需要使用的到数组 问题2:子模型中的名字 问题3:返回复杂的数据(比如在一个字典里面还有一个字典再在里面有一个url数组) 统一处理 四:模型中嵌套模型:数组中存放模型(模型里面有数组数组里面又装着模型) 或者在代理或在一个独立的文件中的load方法中 五:没有注释 没有参与编译 @

iOS开发——完整项目实战OC篇&百思不得姐第六天

百思不得姐第六天 上午 一:使用Xib加载View 一般我们直接在分类里面,因为Xib加载的代码都是一样 二:键盘的两个常见属性 inoutAccessoryView inputView 三:切换系统和自定义键盘的简单使用方式,是不是很变态 根据使用的键盘判断类型并且切换 四:使用动画的方式,其实就是设置切换的时间就可以了 五:特殊需求,直接总定义并且添加View(不使用inoutAccessoryView) 使用通知实现工具条跟着键盘的移动:(上移键盘的高度) 1:改变Y值,上下改变Y值->使

iOS开发——完整项目实战OC篇&百思不得姐第五天

百思不得姐第五天 上午 一:蒙板 tabBarController:addsubViews Window:rootViewController Modal:presentViewController(rootViewController) 二:显示界面不是想要的效果 由于是使用Xib所以默认在ViewDidLoad中的frame是对应Xib的frame:(600,600) 我们如果要实现布局应该在-viewDidLayoutSubViews实现 但是如果真的要在ViewDidLoad里面实现我们

iOS开发——完整项目实战Swift篇&百思不得姐Swift版总结(二)

百思不得姐Swift版总结(二) tabBar和NavBar配色方案 一.常规主题色使用点 应用在发布前都会对其主题色进行设置,以统一应用的风格(可能有多套主题).在主题色设置上有几个方面,如下: 1.TabBar部分,设置图片高亮.文本高度颜色 2.NavigationBar部分,设置导航栏颜色及字体颜色 3.应用标签等,设置字体的颜色 4.应用图片主题色 主题色的设置点,大体从上面四个方面着手,图片的主题色我们可通过图片更换的方式进行处理.而通过代码来处理的1-3条,有着不同的处理方法.大家

百思不得姐第1天

一:项目环境的搭建: 项目环境的搭建包括:1:新建类的前缀   2:项目支持的旋转方向,版本   3:项目名称,软件名称 4:APP的icon,启动图片的设置 5:项目的文件夹分层 6:根控制器的设置 等 具体详情请参照新浪微博的项目环境配置 二:cocoaPods的安装与使用 1:具体参照新浪微博项目cocoaPods的安装与使用:安装并导入所需要的依赖库 三:百思不得姐主框架的搭建 1:删除storyBoard,重新定义窗口的根视图控制器 #import "AppDelegate.h&quo

iOS开发——完整项目实战OC篇&百思不得姐第十一天

百思不得姐第十一天 一:模型中没有ID这个属性 为模型增加一个属性ID,设置名字替换 /** id */ @property (nonatomic, copy) NSString *ID; 替换: + (NSDictionary *)replacedKeyFromPropertyName {     return @{@"ID" : @"id"}; } 二:错误的将数组当作字典来用(其实就是没有数据,比如刷新数据已经没有了,或者直接就是0) 通过堆栈定位错误 最后一

iOS开发——完整项目实战OC篇&百思不得姐第七天

百思不得姐第七天 上午 一:传值方式 谁传值(主动方):谁发通知. 谁传值(主动方):创建Blcok(判断). 谁传值(主动方):创建协议,代理方法. 详细请看: http://www.cnblogs.com/iCocos/p/4659878.html http://www.cnblogs.com/iCocos/p/4550169.html 二:按钮中的文字获取 方法一: 方法二: 将数组的所有path对应的属性取出来,放到一个数组厘面去 三:装逼试判断:三木运算 四:数组不能一边遍历一边删除

百思不得姐数据刷新数据部分(七)

一 刷新功能图和内部计算原理图 1 刷新功能图: 2 内部计算原理图 二 解析步骤 1 分析整个精华模块 2 真实数据请求部分 3 模型 4 先添加尾部刷新控件 5 再添加头部刷新控件 6 处理刷新业务逻辑 7 知识点补充 三 分析模块 1 从一个完整的app中可以看出,在精华模块中处于全部标题的部分数据包括了其它几部分的数据,内部有视频;声音;图片和段子,所以我们只需要将"全部"做好,就能很快的搞定其它模块了. 四 真实数据请求 1 大致步骤: --> 1 查看百思不得姐该部分