「OC」知乎日报第一周

OpenClaw自动化机器人接入飞书实战:从零搭建智能日报收集助手 自动化机器人是现代企业提升协作效率的核心技术之一,其原理是通过API和Webhook实现系统间的数据交互与流程自动化。在技术价值上,它能将员工从繁琐、重复的日常操作中解放出来,减少人为错误,实现工作流的智能串联。典型的应用场景包括自动收集群消息、同步会议纪要到知识库、以及根据关键词触发特定业务流程。本文以飞书协作为例,详细讲解如何利用OpenClaw框架和云函数服务,快速构建一个能自动识别并整理带有“#日报”标签消息的机器人助手。通过事件订阅、权限配置和环境变量管理等关键步骤,即使是非专业开发者也能掌握这一 阅读详情

「OC」知乎日报第一周

前言

本周开始了知乎日报项目的编写,在前面对YYMdoel,Masnory,AFN等第三方库的学习,近期终于开始了组内必写的项目——知乎日报,这个项目使用刚刚学习到的MVVC

第一周成果

第一周的具体成果如下:

请添加图片描述

Model的分装

对于申请的相关信息,有topStory和stroy两个不同的类,我根据申请到的相关信息写出以下的两个类

Story类:

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Story : NSObject
@property (nonatomic, strong) NSArray<NSString *> *images;   // 图片 URL 数组
@property (nonatomic, assign) NSInteger type;                 // 类型
@property (nonatomic, assign) NSString *ID;                   // 故事 ID
@property (nonatomic, strong) NSString *ga_prefix;            // GA 前缀
@property (nonatomic, strong) NSString *title;                // 故事标题
@property (nonatomic, strong) NSString *hint;                // 故事标题

@end

NS_ASSUME_NONNULL_END

topStory类:

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface TopStory : NSObject
@property (nonatomic, strong) NSString *image;
@property (nonatomic, assign) NSInteger type;
@property (nonatomic, copy) NSString *id;
@property (nonatomic, strong) NSString *ga_prefix;
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *hint;

@end

NS_ASSUME_NONNULL_END

View的编写

对于首页的编写,使用了一个TopDisplayView去分装每一个topStory之中的存储的信息,然后以及处理相关的点击逻辑。我是用来Masnory来进行布局具体内容如下

#import "TopDisplayView.h"
#import "Masonry.h"
@implementation TopDisplayView

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self setupViews];
        [self setupConstraints];
    }
    return self;
}

- (void)setupViews {

    self.imageView = [[UIImageView alloc] init];
    self.imageView.contentMode = UIViewContentModeScaleAspectFill;
    self.imageView.clipsToBounds = YES;
    [self addSubview:self.imageView];
    

    self.title = [[UILabel alloc] init];
    self.title.font = [UIFont boldSystemFontOfSize:22];
    self.title.numberOfLines = 0;
    self.title.textColor = [UIColor whiteColor];
    [self addSubview:self.title];
    

    self.subtitle = [[UILabel alloc] init];
    self.subtitle.font = [UIFont systemFontOfSize:14];
    self.subtitle.textColor = [UIColor whiteColor];
    [self addSubview:self.subtitle];
    
        UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
        UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
        blurEffectView.frame = self.bounds;
        blurEffectView.alpha = 1.0;
        CAGradientLayer *gradientLayer = [CAGradientLayer layer];
        gradientLayer.frame = blurEffectView.bounds;
        
        gradientLayer.colors = @[(id)[UIColor colorWithWhite:1.0 alpha:0.0].CGColor,
                                 (id)[UIColor colorWithWhite:1.0 alpha:0.8].CGColor,  // 半透明
                                 (id)[UIColor colorWithWhite:1.0 alpha:1.0].CGColor];
        gradientLayer.startPoint = CGPointMake(0.5, 0.5);
        gradientLayer.endPoint = CGPointMake(0.5, 1.0);
        blurEffectView.layer.mask = gradientLayer;
        
        // 4. 将模糊效果视图添加到图片视图上
        [self insertSubview:blurEffectView atIndex:1];
    
}

- (void)setupConstraints {
    [self.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self);
    }];
    
    [self.title mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.mas_left).offset(16);
        make.bottom.equalTo(self.mas_bottom).offset(-50);
        make.right.equalTo(self.mas_right).offset(-16);
    }];
    
    [self.subtitle mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.title);
        make.top.equalTo(self.title.mas_bottom).offset(14);
        make.right.equalTo(self.title);
    }];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSDictionary *info = @{@"newsID":self.newsID};
    [[NSNotificationCenter defaultCenter] postNotificationName:@"detailInfo" object:nil userInfo:info];
}
@end

可以看到我们在这个重写的UIView的子类之中,添加了一个touchBegin的点击事件,这个点击事件触发了一个监听者,将会将对应点击的故事ID传回主页面,通过网络申请获取对应ID的详情页在主页推出

Controller

对于控制器,我们需要实现根据网络申请的数据进行实时的更新,就是当我们下滑时,我们需要获取前一天日期的相关内容,进行更新,我将具体内容写在了tableView的滚动协议之中,具体内容如下

-(void)LoadNetworkData {
    if (self.isLoad) return;
    self.isLoad = YES;
    [self.loadingIndicator startAnimating];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyyMMdd"];
    NSDate *current = [dateFormatter dateFromString:self.currentDate];
    NSDate *previousDate = [current dateByAddingTimeInterval:-86400];
    
    [[NetworkManager sharedManager] fetchDataNews:self.currentDate completion:^(NSArray<Story *> * _Nonnull news, NSError * _Nonnull error) {
            if (error) {
                NSLog(@"无法加载更多数据: %@", error);
                self.isLoad = NO;
            } else {
                [self.rataData addObject:news];
                [self.tableView reloadData];
                self.currentDate = [dateFormatter stringFromDate:previousDate];
                [self.loadingIndicator stopAnimating];
                self.isLoad = NO;
            }
    }];
}

大致内容如上,面对下拉,则会进行实时更新知乎日报之中的最新内容,这里我使用了OC之中自带的UIRefreshControl进行表示加载

- (void)refreshData:(UIRefreshControl *)refreshControl {
    [[NetworkManager sharedManager] fetchLatestNewsWithCompletion:^(News * _Nonnull response, NSError * _Nonnull error) {
        if (error) {
            NSLog(@"Error fetching latest news: %@", error);
 
            [refreshControl endRefreshing];
        } else {

            self.data = [NSMutableArray arrayWithArray:response.top_stories];
            self.rataData = [NSMutableArray array];
            [self.rataData addObject:response.stories];

            [self.tableView reloadData];
            
            // 结束刷新动画
            [refreshControl endRefreshing];
        }
    }];
}
ROS 入门教程:小乌龟仿真器和基础操作 小乌龟仿真器和ros基础操作 阅读详情

相关推荐

从零到一:高通Memory QMVS测试环境搭建的避坑指南

本文详细介绍了高通Memory QMVS测试环境搭建的全流程避坑指南,涵盖硬件选择、软件配置、QMVS核心组件安装及测试执行技巧。重点解析了adb工具配置、QPST日志抓取等关键步骤,帮助工程师高效搭建稳定测试环境,避免常见兼容性和稳定性问题。

weixin_29251567的博客 554

「OC」知乎日报——第三周

本周完成了知乎日报的评论区功能,实现了用UITextView和富文本字符串结合实现了评论区的展开和回收,学会使用Masnory实现评论区的自定义行高,修改了原先详情页的点赞收藏状态的逻辑问题和滚动视图初始位置不符的问题。关于评论区展开大致有三个要点,首先是判断这个评论是否是否有回复,第二个就是判断textView之中文字的行数,最后一个就是当前textView的文字需要展开的时候进行的相关操作 这些就是对应的短评和长评的Model,接下来还需要给我们写一个相关的网络申请在我们的NetworkManager

aa2002aa的博客 866

C++ 工程实践(9):数据抽象

陈硕 (giantchen_AT_gmail)http://blog.youkuaiyun.com/Solstice  http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.youkuaiyun.com/Solstice/category/8

陈硕的Blog 1万+

【iOS】知乎日报总结

在系统学习了OC语言和UI控件后,知乎日报是第一个比较大的项目,耗时一个多月时间,里面使用到了YYModel、Masonry、AFNetworking、FMDB等多个第三方库。

2301_80467753的博客 1218

Hadoop生态系统-新手快速入门(含HDFS、HBase系统架构)

Hadoop简介 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量...

Hadoop环境搭建教程 471

ubuntu安装XXX包时出现(= 20.0.8-0ubuntu1~18.04.1) but it is not going to be installed

安装mujoco_py时,最后一步尝试 import mujoco_py 时出现报错 esashim.c:1:10: fatal error: GL/osmesa.h: No such file or directory 1 | #include <GL/osmesa.h> | ^~~~~~~~~~~~~ compilation terminated. 在https://github.com/openai/mujoco-py#ubuntu-ins

dealexce的博客 1793

【iOS】知乎日报第四周总结

这里首页获取三个数据混乱的原因主要还是因为网络请求的异步回调的问题,这里笔者上网搜索了一下相关内容后面采用了一个这个类和一个并行队列来解决,这个类是状态锁,这里笔者还不是很清楚原因,这里可以简单介绍一下状态锁的一个内容:这里笔者给出我下滑加载的部分代码: FMDB库的一个使用 这里笔者实现收藏中心采用了一个第三方库FMDB这个库来实现的,首先这个库的是用OC来包装sqlite这个小型数据库,然后我们只需要调用她分装好的一个接口就可以了,这里笔者简单介绍一下使用方法,不涉及原理。创建一个库主要有三种方式来创建

qq_73106050的博客 1078

有限元缺陷:剪切锁死

有限元缺陷:剪切锁死

wsxww11的博客 5184

知乎日报仿写总结

知乎日报前三周总结。

2301_80095702的博客 775

利用python求解规划问题

利用python中的cvxpy,sympy,scipy这三个库进行规划问题求解,本文中的例题均来自司守奎老师的python数学建模算法与应用

dashbaani的博客 1万+

从 AI 助手到 ADT 自动化桥梁:全面解析 Vibing Steampunk 的定位、能力边界与典型使用场合

Vibing Steampunk是一个面向SAP ABAP开发的AI自动化工具集,它通过ADT API将SAP开发能力系统化地暴露给AI助手和命令行工作流。该工具支持ECC、S/4HANA等所有启用ADT的系统,提供代码读取、修改、测试、调试等全流程自动化能力。核心功能包括AI调试、上下文压缩、ABAP语言服务、Lua脚本自动化等,并内置多重安全控制。其分层架构兼容标准ADT和WebSocket扩展,既适合AI驱动开发,也支持传统DevOps自动化,特别适用于老系统代码考古、知识接力和复杂问题诊断场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 150

「OC」SDWebimage的学习

这是SD库之中的框架之中的内容和直接为表层的 UIKit框架提供接口负责处理和协调和, 并与 UIKit层进行交互。真正执行下载请求;最底层的两个类为高层抽象提供支持。

aa2002aa的博客 736

081、LLC谐振变换器的短路特性与保护

本文深入分析了LLC谐振变换器在短路工况下的特性与保护策略。作者通过实际案例指出,LLC在输出短路时会出现谐振电流失控、ZVS条件丧失等危险现象,导致MOS管炸毁。文章详细阐述了短路保护的三大难点:响应速度、频率与电流的耦合、重启策略,并提出了硬件级快速保护、频率快速拉升、打嗝模式等实用解决方案。作者分享了关键参数设计经验,包括电流检测阈值设置、最高频率限制和保护响应时间控制,并通过实测波形验证了保护效果。最后总结出五点重要经验,强调硬件保护的必要性和系统设计的注意事项,为LLC变换器的短路保护设计提供了有

Jack010169的博客 71

知乎日报——第四周

完成了离线缓存功能,在网络请求受阻的情况下,可以使用缓存当中的信息,这样加载过的信息在没有网络的情况下也可以获取信息。到此为止,知乎日报的内容已经大致完成,剩下一些细节还需要慢慢的完善,通过知乎日报这个项目,确实逐步了解了如何用MVC的架构去写一个稍微完整的项目,学习了许多新的知识以及第三方库。当然过程之中仍然暴露了许多之前从未想过到的问题,还是认识到了自身的不足,还是希望自己能够在学习路上越来越精进自己。

aa2002aa的博客 1078

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

「OC」多线程(三)——NSOperation

在写了知乎日报之前学习了相关的GCD和NSThread的相关内容,然后在知乎日报写完之后,我继续开始OC之中多线程的NSOperation的学习。由于之后肯定是要对和SDWebImage的源码继续相关学习,所以学习NSOperation的相关内容也是给后面做铺垫。NSOperation 是苹果公司对 GCD 的封装,完全面向对象,并比GCD多了一些更简单实用的功能,所以使用起来更加方便易于理解。NSOperation 和NSOperationQueue 分别对应 GCD 的 任务 和 队列。

aa2002aa的博客 1189

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

swift学习六天 项目实战-知乎日报之UITabelView使用

上篇写了接口部分,现在来开始开发界面部分. 界面开发的da

guchengyunfeng的专栏 3039

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

知乎日报第三次小结

知乎日报第三次小结 本周主要是完成知乎日报的收藏功能。 首先在完成收藏前先学习了一下数据库FMDB的用法: 首先什么是FMDB 1. FMDB是iOS平台的SQLite数据库框架 2. FMDB以OC的方式封装了SQLite的C语言API FMDB的优点 1. 使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码 2.对比苹果自带的Core Data框架,更加轻量级和灵活 3.提供了多线程安全的数据库操作方法,有效地防止数据混乱 FMDB的核心类 首先FMDB有三个主要的类: FMDatabase:一个

weixin_51638861的博客 2413

javascript调用OC原生方法

【代码】javascript调用OC原生方法。

carbonzhao的专栏 443

App开发日报 2015-05-17 Awesome-MaterialDesign更新

1. Awesome-MaterialDesign更新 2. iOS动画开发教程 3. ios开发UI基础xib封装 4. android开发可能会导致内存泄露的问题记录 5. Android逆向分析

app开发日报的专栏 872

iOS精仿唱吧下载按钮、仿知乎日报、自定义提示视图、过渡动画、记录应用等源码

iOS精选源码 IOS之分段控制器OC/Swift通用 Swift4.0_组件化:APP启动引导页页 精仿唱吧App音乐下载按钮,完美快速集成使用 iOS指纹解锁和手势解锁源码 OC _纯代码颜色选择器(仿Keynote) 非常简单的空白页面提示视图,支持完全自定义 模仿Airbnb首页过渡动画 EMark,让记录更简单,...

sunnyaigd830的博客 561

支付宝开放平台-开发者社区——AI 日报「1 月 9 日」

在多项测评上,DeepSeek V3 达到了开源 SOTA,超越 Llama 3.1 405B,能和 GPT-4o、Claude 3.5 Sonnet 等 TOP 模型正面掰掰手腕——而其价格比 Claude 3.5 Haiku 还便宜,仅为 Claude 3.5 Sonnet 的 9%。放弃「既要又要」路线,至今专注在研究和技术,未做 toC 应用的公司,也是唯一一家未全面考虑商业化,坚定选择开源路线甚至都没融过资的公司。谷歌AI智能体报告中,一张图表清晰列出了AI在知识扩展、任务处理等方面的强项。

2401_85476653的博客 781

fir.im Weekly - 进击的 Swift

最近 Swift 开源了,众开发者们欢呼雀跃。感谢开源,这是最好的时代。本期 fir.im Weekly 准备了一些关于 Swift 的“新鲜”干货分享,也包括一些优秀的 GitHub 源码、开发工具和技术文章等等。 Swift 开源了 美国西海岸时间,12月3日,Swift 开源了,可用于 iOS、OS X 和 Linux 平台。刚上 Github 短短 1 天,已经有近 1 万个 Star。...

weixin_30436891的博客 171

iOS精仿唱吧下载按钮、仿知乎日报、自定义提示视图、过渡动画、记录应用等源码...

iOS精选源码 IOS之分段控制器OC/Swift通用 [图片上传失败...(image-d059e7-1533952715371)] Swift4.0_组件化:APP启动引导页页 [图片上传失败...(image-345d76-1533952715371)] 精仿唱吧App音乐下载按钮,完美快速集成使用 [图片上传失败...(image-144b57-1533952715371)] iOS指纹解...

科技区软件类AI博主 🔍 专注 AI 工具测评 / 前沿产品深度拆解 / 行业趋势预判 🚫 拒绝科技玄学,只讲人话干货 —— 从工具使用到商业落地,搭建可复用的 AI 应用框架 159

Github上的iOS App源码 (中文)

Github版 英文App地址 IOS源码网: http://www.codesky.net/ios/list-2.htm http://www.code4app.com/forum-2-1.html?sid=3|125 中文 : TeamTalk 蘑菇街. 开源IM. 电商强烈推荐. MyOne-iOS 用OC写的《一个》 iOS 客户端 zhihuDaily 高...

女王の专属领地 1756

【iOS】SDWebImage

在写知乎日报项目时,遇到了图片加载和通过API异步加载图片的问题,在组内成员的引导下,去学习了SDWebImage开源库。

2301_80467753的博客 1421
上一篇: 「OC」SDWebimage的学习
下一篇: SQLite3语句以及用实现FMDB数据存储的学习
小鹿撞出了脑震荡
博客等级 码龄3年 1107粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值