不得不说,自己抓数据写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