怎么把网页放到网站上,网络公司最好的是哪个,湖南省住房和城乡建设厅网,中国建设银行网站首页手机银行知乎日报仿写 前言效果Manager封装网络请求线程冲突问题下拉刷新添加网络请求的图片通过时间戳和日期格式化获取时间 总结 前言
前两周内容的仿写#xff0c;主要完成了首页的仿写#xff0c;进度稍慢。 效果 Manager封装网络请求
知乎日报的仿写需要频繁的申请网络请求主要完成了首页的仿写进度稍慢。 效果 Manager封装网络请求
知乎日报的仿写需要频繁的申请网络请求将所有的网络请求封装成一个Manager类可以有效减少代码量并且优化数据的使用。 具体内容在往期博客中使用单例类进行网络请求「iOS」——AFNetworking的简单使用
此处需要注意使用数据时要将模型转为字典需要在Model层自己写转换的方法。
线程冲突问题
这里我使用AFNetwokring第三方库来实现网络请求AFNetworking 通过 NSURLSession 将所有的网络请求放入后台线程进行处理。此时就会出现线程问题。具体的问题就是
-(void) GetScrollerModel
{self.str_date [DateModel getCurrentDateString];NSLog(%,self.str_date);[[Manger sharedSingleton] NetWorkWithScroller:^(ScrollerModel *Model_Scroller) {self.dict_Scroller [Model_Scroller ModelToDict:Model_Scroller];for(int i 0; i 5; i) {[self.array_Scroller_ID addObject: self.dict_Scroller[top_stories][i][id]];[self.array_Scroller_URL addObject:self.dict_Scroller[top_stories][i][url]];[self.array_Scroller_Image addObject:self.dict_Scroller[top_stories][i][image]];[self.array_Scroller_title addObject:self.dict_Scroller[top_stories][i][title]];[self.array_Scroller_hint addObject:self.dict_Scroller[top_stories][i][hint]];}self.dict_data [Model_Scroller ModelToDict:Model_Scroller];[self.array_data addObject:self.dict_data];} andError:^(NSError *error) {NSLog(GetScrollerModel错误:%,error);}];
[[Manger sharedSingleton] NetWorkWithTheme:^(CellModel *Model) {self.dict_data [Model ModelToDict:Model];NSLog(dice:%,self.dict_data[stories][1][hint]);[self.array_data addObject:self.dict_data];} andError:^(NSError *error) {NSLog(CellModel错误%,error);} andNSString:(NSString *)self.str_date];[self setupTableView];
}我在此进行网络数据请求时数组的第一项可能是第一个网络请求的也可能是第二个网络请求的。并且更新UI的实际也不确定会导致程序崩溃。 我通过如下方法将第二个网络申请嵌套在第一个内并通过GCD保证线程安全。
-(void) GetScrollerModel
{self.str_date [DateModel getCurrentDateString];NSLog(%,self.str_date);[[Manger sharedSingleton] NetWorkWithScroller:^(ScrollerModel *Model_Scroller) {self.dict_Scroller [Model_Scroller ModelToDict:Model_Scroller];for(int i 0; i 5; i) {[self.array_Scroller_ID addObject: self.dict_Scroller[top_stories][i][id]];[self.array_Scroller_URL addObject:self.dict_Scroller[top_stories][i][url]];[self.array_Scroller_Image addObject:self.dict_Scroller[top_stories][i][image]];[self.array_Scroller_title addObject:self.dict_Scroller[top_stories][i][title]];[self.array_Scroller_hint addObject:self.dict_Scroller[top_stories][i][hint]];}self.dict_data [Model_Scroller ModelToDict:Model_Scroller];[self.array_data addObject:self.dict_data];[[Manger sharedSingleton] NetWorkWithTheme:^(CellModel *Model) {self.dict_data [Model ModelToDict:Model];NSLog(dice:%,self.dict_data[stories][1][hint]);[self.array_data addObject:self.dict_data];dispatch_async(dispatch_get_main_queue(), ^{[self setupTableView];});} andError:^(NSError *error) {NSLog(CellModel错误%,error);} andNSString:(NSString *)self.str_date];} andError:^(NSError *error) {NSLog(GetScrollerModel错误:%,error);}];}
下拉刷新
上述代码强调加入数组的顺序与此处下拉刷新有关。我下拉刷新的逻辑是通过调用-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate方法。判断当前下滑是否下滑到底。设立一个falg全局变量如果到底就使flag然后根据数组上一个的date数据的Date进行网络请求。这里添加进入数组的顺序关系到网络请求的顺序因此一定要保证是按顺序加入。
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{NSString *str_new self.array_data[1_falg][date];if(scrollView.contentOffset.y self.tableView_First.contentSize.height - self.view.bounds.size.height - 50) {[[Manger sharedSingleton] NetWorkWithTheme:^(CellModel *Model) {[self.array_data addObject:[Model ModelToDict:Model]];self.falg ;[self.tableView_First reloadData];} andError:^(NSError *error) {NSLog(xialaerror:%,error);} andNSString:(NSString *) str_new]; }
}添加网络请求的图片
知乎日报的API的图片是通过URL地址保存因此这里通过SDWebImage库来进行使用这个库可以通过图片URL将图片加载到指定的UI控件上。此处只用到如下代码
NSString *str_url self.array_data[current][stories][indexPath.row][images][0];[cell.imagView_Small sd_setImageWithURL:[NSURL URLWithString:str_url]placeholderImage:[UIImage imageNamed:placeholder]];通过时间戳和日期格式化获取时间
我们既可以通过NSDateFormatter获取时间也可以通过时间戳来获取时间。 时间戳获取时间将时间字符串解析为NSDate对象并通过自1970年1月1日以来的秒数来获取时间信息。 通过时间戳获取时间的优点有
精确性能够避免因时区变化引起的问题。通用性时间戳可以在不同系统之间传递并且易于存储因为它是一个简单的数字。方便进行时间计算时间戳可以直接用于时间的加减运算适合需要进行复杂时间计算的场景。
#import Foundation/Foundation.hinterface DateModel : NSObject(NSString *)getCurrentDateString;
(NSString *)getMonthWithDateString;(NSTimeInterval)getTimestampWithTimeString: (NSString *) timeString;
(NSString *)getDateWithTimeString:(NSString *) timeString;
(NSString *)getMouthWithTimeString:(NSString *) timeString;
(NSString *)getDayWithTimeString:(NSString *) timeString;
(NSString *)getBeforeDateWithTimeString:(NSString *) timeString;end
但是时间戳写起来略微有点麻烦直接使用NSDateFormatter日期格式化代码更简便。
//时间戳形式
(NSTimeInterval)getTimestampWithTimeString:(NSString *)timeString
{NSDateFormatter *dateFirmatter [[NSDateFormatter alloc] init];[dateFirmatter setDateFormat:YYYYMMdd];NSDate *date [dateFirmatter dateFromString:timeString];NSTimeInterval timeStamp [date timeIntervalSince1970];return timeStamp;
}//通过日期格式化
(NSString*)getCurrentDateString
{NSDateFormatter *dateFormatter [[NSDateFormatter alloc] init];[dateFormatter setDateFormat:YYYYMMdd];return [dateFormatter stringFromDate:[NSDate date]];
} 总结
首页的大部分已经完成正在写单元格点击的响应事件。进度较慢下星期尽量多写些。