当前位置: 首页 > news >正文

仿写知乎日报第一周

效果图

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

主要的逻辑

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;
@endNS_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数组的越界问题,因此我只能刷新两次就崩了,这周我改正了这个问题会将解决方法写在下周的博客中。

相关文章:

仿写知乎日报第一周

效果图 主要的逻辑 Manager封装网络请求 首先&#xff0c;对于获取网络请求&#xff0c;我是将这些方法封装成了一个类Manager&#xff0c;后续在获取以往的内容时又封装了一个beforeManager类用于网络请求。这里不多赘述&#xff0c;Manager封装网络请求的知识参考我的以往博…...

32二叉树——DFS深度优先遍历

目录 深度优先算法&#xff08;Depth-First Search&#xff0c;DFS&#xff09; LeetCode之路——102. 二叉树的层序遍历 分析 深度优先算法&#xff08;Depth-First Search&#xff0c;DFS&#xff09; DFS是一种用于遍历或搜索树状数据结构的算法&#xff0c;其中它首先探…...

华为昇腾NPU卡 ChatGLM2模型使用

参考&#xff1a;https://gitee.com/mindspore/mindformers/blob/dev/docs/model_cards/glm2.md#chatglm2-6b 1、安装环境&#xff1a; 昇腾NPU卡对应英伟达GPU卡&#xff0c;CANN对应CUDA底层&#xff1b; mindspore对应pytorch&#xff1b;mindformers对应transformers 本…...

【机器学习】集成模型/集成学习:多个模型相结合实现更好的预测

1. 概述 1.1 什么是集成模型/集成学习 "模型集成"和"集成学习"是相同的概念。它们都指的是将多个机器学习模型组合在一起&#xff0c;以提高预测的准确性和稳定性的技术。通过结合多个模型的预测结果&#xff0c;集成学习可以减少单个模型的偏差和方差&am…...

如何提高广告投放转化率?Share Creators 资产库与Appsflyer营销数据的全面结合

如何提高广告投放转化率&#xff1f;Share Creators 资产库与Appsflyer营销数据的全面结合 全球经济进入了低迷期。 营销成本越来越高&#xff0c; 营销需要更务实&#xff0c;注重投入产出比。众所周知&#xff0c;除了渠道、客群画像以外&#xff0c; 优秀的广告设计图&#…...

《软件方法》2023版第1章(11)1.4.3 具体工作步骤

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 1.4 应用UML的建模工作流 1.4.3 使用UML建模的工作流步骤 图1-17中“工件形式”一列所列出的图就是本书推荐的在建模工作流ABCD中的UML用法&#xff0c;我用活动图进一步表示建模的步…...

git将当前分支A强制推送远程分支pro上

前言 开发中基于线上分支pro创建了A分支&#xff0c;开发完成之后。又基于线上分支pro创建了B分支&#xff0c;都以此合并到测试分支&#xff0c;两个分支更改中都动用部分共同的文件&#xff0c;这就导致后续开发合并代码越来越乱&#xff0c;这时你想把本地开发的分支强推到…...

【计算机基础】存储器

目录 一.概念二.分类1&#xff0e;按存储介质分类2&#xff0e;按存储方式分类3&#xff0e;按存储器的读写功能分类4&#xff0e;按信息的可保存性分类5&#xff0e;按在计算机系统中的作用分类 三.主存区分SRAM、DRAM、Flash、DDR1.SRAM&#xff08;静态随机存储器&#xff0…...

【LCR 159. 库存管理 III】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int getrandom(int left,int right,vector<int>& stock){return stock[rand()%(right-left1)left];}void qsort(int l,int r,vector<int>& s…...

Android ADB 常见问题和注意事项

Android ADB 常见问题和注意事项 在使用 ADB 过程中&#xff0c;可能会遇到一些常见问题和需要注意的事项&#xff1a; 1. USB 调试 要使用 ADB&#xff0c;你需要在设备上启用 USB 调试模式。这通常在设备的开发者选项中设置。如果你不能看到开发者选项&#xff0c;可以在设…...

TCP/IP五元组

什么是五元组规则&#xff1f; 五元组是通信术语&#xff0c;英文名称为five-tuple,或5-tuple&#xff0c;五元组包括源IP地址(source IP)、源端口(source port)、目的IP地址(destination IP)、目的端口(destination port) 和 传输层协议(the layer 4 protocol)的五个量集合。…...

aiohttp ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] 错误处理

这个问题原因吧其实就是3.10 开始官网更新了TLS 堆栈默认安全设置 感兴趣的可以看下链接 python官网叙述: Python 3.10 增加了 TLS 堆栈的默认安全设置 解决也很简单&#xff0c;将ssl安全等级降下来就行&#xff0c;例如&#xff1a; import ssl import aiohttp ctx ssl.cr…...

分析RPA流程自动化的挑战和解决方案

随着数字化工具和自动化解决方案的日益成熟&#xff0c;各行各业发掘到RPA机器人流程自动化技术的先进性&#xff0c;逐渐规模化部署RPA。 为了更好地推进RPA的实施&#xff0c;金智维在这里分享一些运用这项技术时面临的共同挑战&#xff0c;并给出针对性的解决方案。 组织架构…...

我试图扯掉这条 SQL 的底裤。只能扯一点点,不能扯多了

之前不是写分页嘛,分页肯定就要说到 limit 关键字嘛。 然后我啪的一下扔了一个链接出来: https://dev.mysql.com/doc/refman/8.0/en/limit-optimization.html 这个链接就是 MySQL 官方文档,这一章节叫做“对 Limit 查询的优化”,针对 limit 和 order by 组合的场景进行了较…...

LeNet(pytorch实现

LeNet 本文编写了一个简单易懂的LeNet网络&#xff0c;并在F-MNIST数据集上进行测试&#xff0c;允许使用GPU计算 在这里插入代码片 import torch from torch import nn, optim import d2lzh_pytorch as d2ldevice torch.device(cuda if torch.cuda.is_available() else cp…...

Selenium获取百度百科旅游景点的InfoBox消息盒

前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒&#xff0c;同样可以通过Spider获取网站内容&#xff0c;最近学习了SeleniumPhantomjs后&#xff0c;准备利用它们获取百度百科的旅游景点消息盒&#xff08;InfoBox&#xff09;&#xff0c;这也是毕业设计实体对齐和属…...

springcloud笔记 (8) -网关 Gateway

网关 出国需要过海关 网关&#xff1a;网络的关卡 网关的作用 1&#xff1a;路由转发 2&#xff1a;安全控制 保护每个服务&#xff0c;不需要将每个暴露出去 3&#xff1a;负载均衡 1.没有网关&#xff1a;客户端直接访问我们的微服务&#xff0c;会需要在客户端配置很多…...

【C++编程语言】STL常用算法 算术生成和集合算法

1.算术生成算法概念 算法简介&#xff1a; accumlate 计算容器元素累计总和fill 向容器中添加元素 注意&#xff1a;算术生成算法属于小型算法 使用时包含头文件为#include<numeric> 2.accumulate /*函数原型&#xff1a;int accumulate(iterator beg ,iterator end…...

解放双手:VMLogin自动化工具的高效便捷

在现代工作环境中&#xff0c;时间和效率是我们追求的关键。幸运的是&#xff0c;随着技术的发展&#xff0c;自动化工具为我们提供了解放双手的机会。其中&#xff0c;防关联浏览器的自动化就是一种强大的工具&#xff0c;能够简化我们的工作流程并提升效率。本文将探讨浏览器…...

深度解析网络代理技术及其在网络安全和爬虫应用中的关键作用

在当今数字化时代&#xff0c;网络代理技术在维护网络安全、保护隐私以及实现高效数据获取方面发挥着不可或缺的作用。本文将全面解析Socks5代理、IP代理等关键技术&#xff0c;并探讨其在网络安全和爬虫开发中的重要作用。 1. Socks5代理与SK5代理&#xff1a;多功能代理协议…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...