c2c网站怎么做,wordpress创建表单,网络工程师考试资料,学校网站开发价格效果图 主要的逻辑
Manager封装网络请求
首先#xff0c;对于获取网络请求#xff0c;我是将这些方法封装成了一个类Manager#xff0c;后续在获取以往的内容时又封装了一个beforeManager类用于网络请求。这里不多赘述#xff0c;Manager封装网络请求的知识参考我的以往博…效果图 主要的逻辑
Manager封装网络请求
首先对于获取网络请求我是将这些方法封装成了一个类Manager后续在获取以往的内容时又封装了一个beforeManager类用于网络请求。这里不多赘述Manager封装网络请求的知识参考我的以往博客iOS——Manager封装网络请求获取到网络请求之后使用Model层的类和JSONModel来获取接收到的内容JSONModel的知识可以参考我以往的博客iOS——JSONModel的使用与JSONModel的嵌套在Model层我使用了两个类一个mainModel用于接收一开始启动程序接收的内容一个beforeModel用于接收以往的内容。
线程的管理
在写知乎日报的时候遇见了线程的问题比如说在viewController中获取Manager网络请求的内容时因为在viewControllert中viewDidLoad执行的很早所以如果将View层的初始化放在viewDidLoad的话就会先去布局好UI等网络请求好时无法将请求到的数据赋给UI控件。所以这时候需要将View层的初始化重新放在一个实例方法loadUI中在完成网络请求之后再去调用该loadUI方法。这时候就会发现如果我们只是将其不加修饰写在网络请求完回调的方法时就会报错因为View的初始化不在主线程进行。这时我们就需要使用
dispatch_async(dispatch_get_main_queue(), ^{[self loadUI];});使其在主线程中进行才能解决问题。 同样的在后面刷新tableView时的reloadData也要使用这个方法是因为在iOS中reloadData方法必须在主线程上调用。
加载网络图片
在进行网络请求时我发现请求到的图片内容都是url此时我们没办法直接将其转化为图片形式所以就要使用一个第三方库SDWebImage库这个库可以将我们请求到的url转为图片其用法如下 首先我们要导入该库和Masonry、JSONModel这些的方法一样pod ‘SDWebImage’ 即可 然后获取我们通过网络请求到的图片的url并且导入SDWebImage的头文件。然后使用 SDWebImage 中的 sd_setImageWithURL: 方法将网络图片加载到 UIImageView 中。 示例
[yourImageView sd_setImageWithURL:[NSURL URLWithString:图片的url]placeholderImage:[UIImage imageNamed:placeholder]];这将下载位于指定 URL 的图片并将其设置为 yourImageView如果图片下载失败将会使用 placeholder 图片作为占位符。
左上角时间的获取
这里我使用了NSDate来获取当前时间并将时间转化为字符串然后赋值给View层。
#import Foundation/Foundation.h
NS_ASSUME_NONNULL_BEGINinterface timeModel : NSObject
- (NSArray*)titleTimeLabel;
endNS_ASSUME_NONNULL_END#import timeModel.himplementation timeModel- (NSArray *)titleTimeLabel {NSDate *timeDate [NSDate date];NSCalendar *gregorian [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian];unsigned unitFlags NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday;NSDateComponents *comp [gregorian components: unitFlags fromDate: timeDate];NSString *month [[NSString alloc] init];if (comp.month 1) {month 一;}if (comp.month 2) {month 二;}if (comp.month 3) {month 三;}if (comp.month 4) {month 四;}if (comp.month 5) {month 五;}if (comp.month 6) {month 六;}if (comp.month 7) {month 七;}if (comp.month 8) {month 八;}if (comp.month 9) {month 九;}if (comp.month 10) {month 十;}if (comp.month 11) {month 十一;}if (comp.month 12) {month 十二;}NSString *day [NSString stringWithFormat:%ld, (long)comp.day];NSArray * timeArr [NSArray arrayWithObjects:month, day, nil];return timeArr;
}end单元格的刷新
这块我的代码还有问题但是我初步写出了这个逻辑。我使用了- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath协议方法当即将出现某indexPath.row位置的单元格时就调用该方法。我使用了一个全局变量numberOfCell其初始值为1我的单元格的行数的返回值就是5 * numberOfCell每当调用到该方法时numberOfCell就会加一因此我的单元格数量刷新后就会增加5个。当触发该方法的时候就获取存在ManagerModel类中date属性该属性表示当天的日期的字符串然后将该date-1就得到前一天的时间我还定义了一个全局变量n用于表示刷新了多少天每当刷新一次就让n1因此使用date-n就能得到刷新的对应天数的字符串再将该字符串传给beforeManager的timeStr属性该属性用来补全https://news-at.zhihu.com/api/4/news/before/%的url然后进行网络请求这样我们就获得到了刷新后的内容再将该内容赋给对应的beforeStoriesModel类的实例的stories属性再将该属性给单元格并刷新单元格就实现了单元格的刷新。 但是目前有个获取到的stories数组的越界问题因此我只能刷新两次就崩了这周我改正了这个问题会将解决方法写在下周的博客中。