仿写知乎日报第一周

news2024/11/19 9:37:21

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主要的逻辑

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_BEGIN

@interface timeModel : NSObject
- (NSArray*)titleTimeLabel;
@end

NS_ASSUME_NONNULL_END
#import "timeModel.h"

@implementation 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用于表示刷新了多少天,每当刷新一次就让n+1,因此使用date-n就能得到刷新的对应天数的字符串,再将该字符串传给beforeManager的timeStr属性,该属性用来补全https://news-at.zhihu.com/api/4/news/before/%@的url,然后进行网络请求,这样我们就获得到了刷新后的内容,再将该内容赋给对应的beforeStoriesModel类的实例的stories属性,再将该属性给单元格并刷新单元格,就实现了单元格的刷新。
但是目前有个获取到的stories数组的越界问题,因此我只能刷新两次就崩了,这周我改正了这个问题会将解决方法写在下周的博客中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1124594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中常用的性能分析工具

1 明确目标 进行性能分析时&#xff0c;需要明确优化的目标&#xff0c;例如&#xff0c;是优化整体的性能&#xff0c;还是某个功能的性能。 明确优化目标后就需要能够知道当前的性能瓶颈&#xff0c;性能消耗在什么地方&#xff0c;以及如何去衡量&#xff0c;这样也能够在…

二叉树题目:最大二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;最大二叉树 出处&#xff1a;654. 最大二叉树 难度 5 级 题目描述 要求 给定一个没有重复元素的整数数组 num…

一键操作,高效管理!个微管理系统

在微信日益普及的今天&#xff0c;越来越多的人使用微信进行交流。然而&#xff0c;在工作中&#xff0c;我们往往需要处理大量的消息&#xff0c;手动回复不仅效率低下&#xff0c;还容易出错。还有朋友圈转发&#xff0c;不能一键转发&#xff0c;需要手动保存添加再一个个图…

架构风格区别-架构案例(五十九)

管道-过滤器和仓库的区别&#xff1f; 独立的数据仓库&#xff0c;处理流独立&#xff0c;处理数据用连接仓库工具数据与处理在一起&#xff0c;改动的话需要重启系统需要仓库工具与仓库连接&#xff0c;数据与处理分离&#xff0c;性能差可以支持并发连接访问仓库&#xff0c…

如何判断要不要用振动技术来进行设备预测性维护

在现代工业设备运行过程中&#xff0c;及时发现设备故障并进行维修对于确保生产线的正常运行至关重要。振动分析技术作为一种先进的设备监测和预测性维护方法&#xff0c;通过实时监测和分析设备的振动信号&#xff0c;可以提前发现潜在故障&#xff0c;降低停机时间和维护成本…

最全的图床集合(国内外,站长必备)

“heosu每月不定时更新嗷&#xff0c;防止错过消息推送&#xff0c;建议小伙伴添加到星标⭐喔” 为了减少服务器的压力不少站长还是选择图床存放图片的。所以就搜集一些比较好用的免费的图床&#xff08;收费的在最后标出&#xff09;以及我目前在用的图床。 为什么需要图床&am…

Biotech - 环状 mRNA 的 LNP 递送系统 与 成环框架

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/133992971 环状 RNA&#xff08;或 circRNA &#xff09;是一种单链 RNA&#xff0c;与线性 RNA 不同&#xff0c;形成一个共价闭合的连续环。在环…

如何使用Pritunl搭建OpenVPN服务器,实现远程连接【内网穿透】

文章目录 前言1.环境安装2.开始安装3.访问测试4.创建连接5.局域网测试连接6.安装cpolar7.配置固定公网访问地址8.远程连接测试 前言 Pritunl是一款免费开源的 VPN 平台软件&#xff08;但使用的不是标准的开源许可证&#xff0c;用户受到很多限制&#xff09;。这是一种简单有…

vue 生命周期钩子函数 created()案例

通过发请求来获取数据。在数据响应化之后&#xff0c;dom搭建之前&#xff0c;通过发送axios来获取数据并初始化。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible"…

DFT和ATE岗位前景薪资对比,手把手教你如何选择岗位?

ATE测试和DFT可测性设计&#xff0c;虽然二者都对芯片测试至关重要&#xff0c;但是两个岗位的区别还是很大的。 两个岗位应该如何做选择&#xff1f; 先讲产业环节 我们知道芯片设计、芯片制造、芯片封测每个环节都是大工程&#xff0c;且每个环节都关键且重要。测试是芯片诞…

纳米软件电源模块测试系统助力电压输入缓慢变动测试 解决测试痛点

输入缓慢变动测试是电源模块测试项目之一&#xff0c;其目的是为了验证当输入电压偏低情形发生时&#xff0c;待测品能够自我保护&#xff0c;而且不会被损坏。用纳米软件电源模块测试系统测试电源模块输入电压缓慢变动&#xff0c;解决传统测试程序繁琐、速度慢、效率低难点。…

不会用PS抠图?教你懒人抠图法,必须学会!

相信很多小伙伴都有遇到这样的窘境——好不容易找到得素材图片&#xff0c;中间的图案很好看&#xff0c;可是特别想去掉后面的背景&#xff0c;应该如何抠图呢&#xff1f; 能够将图片中的物品或人物抠出来是一种很有用的技巧&#xff0c;可以在很多场景下应用&#xff0c;比…

数据库连接池有什么用?它有哪些关键参数?

首先&#xff0c;数据库连接池是一种池化技术&#xff0c;池化技术的核心思想是实现资源的复用&#xff0c;避免资源重复创建销毁的开销。而在数据库的应用场景里面&#xff0c;应用程序每次向数据库发起 CRUD 操作的时候&#xff0c;都需要创建连接.在数据库访问量较大的情况下…

DB-GPT发布:用私有LLM技术彻底改革数据库互动

01 项目介绍 随着大模型的发布迭代&#xff0c;大模型变得越来越智能&#xff0c;在使用大模型的过程当中&#xff0c;遇到极大的数据安全与隐私挑战。在利用大模型能力的过程中我们的私密数据跟环境需要掌握自己的手里&#xff0c;完全可控&#xff0c;避免任何的数据隐私泄…

【问题思考总结】已知对角矩阵怎么求原矩阵?原矩阵唯一吗?【相似对角化】

问题 这个问题起源于2010年数一真题&#xff1a; 给定一个对角阵&#xff0c;说QTAQ对角阵&#xff0c;然后Q矩阵实际上是能求出来无穷个的&#xff0c;在这种情况下&#xff0c;A矩阵该怎么求&#xff1f;或者说&#xff0c;Q矩阵不同的时候&#xff0c;A矩阵唯一吗&#xf…

uniapp水果海鲜生鲜商城系统小程序H5源码APP 同城配送、自提、拼单、多门店商城

外卖多门店小程序开源版开发 能够更好的适用于瑜伽馆、健身房、美容美发店、鲜花店、水果店、宠物店、母婴店、教育培训机构&#xff0c;送奶站、送水站&#xff0c;足疗按摩店、儿童摄影馆、上门服务&#xff08;如&#xff1a;家政、维修&#xff09;、无人售货超市、新零售会…

分治法,动态规划法,贪心法,回溯法主要概括

目录 分治法&#xff0c;动态规划法&#xff0c;贪心法&#xff0c;回溯法主要概括 1.前言2.分治法2.1基本思想&#xff1a;2.2适用条件&#xff1a;2.3时间复杂度&#xff1a;2.4主要解决&#xff1a;2.5关键字&#xff1a;2.6其他&#xff1a; 3.动态规划法3.1基本思想&…

2023/10/23学习记录

1.VS2019中sln对应解决方案 修改sln的文件名&#xff0c;对应的解决方案名称也会变化。 2.如何修改生成的exe文件名呢&#xff1f; 属性--->杂项--->&#xff08;名称) 3.这是任务管理器&#xff0c;这里红色部分显示的是“这是文件描述”。 当通过属性查看详细信息的时…

朋友圈推广如何做?

为什么在朋友圈做推广是如此重要&#xff0c;以及如何充分利用这个平台来推动你的业务增长。 不仅仅是分享生活点滴&#xff0c;朋友圈也可以成为你的事业起飞的跳板。快来了解一下吧&#xff01; 为什么在朋友圈做推广&#xff1f; 1、人脉力量&#xff1a;朋友圈是一个连接…