1、从7月23日首次付费到昨天,已使用Cursor编辑了90511行代码,马上突破10万行
2、我发现在修改待办事项和编辑AI模型时有一个共性的问题:选一条AI模型或待办事项,点编辑时,会出现一个小的空白弹窗,选另一条AI模型或待办事项点击“编辑”时才会出现编辑窗口,之后就能正常编辑所有的AI模型和待办事项了,看看是不是AIModelSettingsView、AIModelManangementView、TodoDetailView这几个文件的问题,另外AIModelSettingsView里面为何还有针对gpt-4、gpt-3.5-turbo、deepseek-r1、claude-3的图标和颜色设置?我不需要这些预置的设置,模型由用户自行添加就可以了
3、Cursor表示根本原因在于Sheet逻辑显示不正确,可能是这三个文件使用了isPresented和if let的组合,当第一次点击编辑时,状态变量可能还没有正确设置,导致显示空白弹窗,同时也删除了预置的模型设置,问题顺利解决
4、从代码来看,AIModelSettingsView、AIModelManangementView,这两个文件的功能好像有些重合,询问Cursor后发现前者未被使用,且是一个独立的弹窗界面(可能是在AI对话界面选择模型-管理模型时的弹窗,但之前已经去掉了这里的“管理”按钮),后者正在SettingsDetailView中被调用,即设置-模型管理,于是让Cursor删除了冗余的AIModelSettingsAView文件
5、接下来让Cursor给AI模型管理界面添加一个测试功能,点击测试按钮可以测试能否正常响应,这样可以避免信息填错但一时未发现影响使用的情况,Cursor直接在AI模型管理界面每个模型的右侧增加了测试按钮,并且用颜色来区分测试状态,橙色为测试中,绿色为连接成功,并且显示响应时间,红色为失败,测试了下目前我添加的四个模型,deepseek V3响应时间最长,1373ms,火山方舟平台的deepseek r1响应时间最短,244ms,来自OpenRouter的claude 3.7 sonnet响应时间竟然仅有253ms,还是很让我惊讶的
6、改完上面的几个小问题之后,继续测试和完善待办事项相关功能,我发现“编辑待办事项”界面的优先级设置有八个按钮(包含文字和图标),但是不是只有四个分级?比如我点击文字“普通”,对应的优先级是紧急,我点击文字“低”,对应的优先级是普通,另外,我需要去掉“事项标题”、第二行“优先级”、“选择分组”这些文字,有点多余了,Cursor表示之前使用的是segmented样式的Picker,可能导致显示8个按钮且对应关系混乱,改成了自定义按钮样式,确保只有四个优先级,并且简化了界面上的说明文字,这样界面就更简洁了
7、接下来是截止日期设置的优化、添加重复频率功能,目前截止日期并非强制要求填写,但我需要必须填写截止日期,并且需要重复频率功能,也添加到这个页面,和选择日期的功能放在同一行,重复频率包含每天、每周、每月、每年,只要选择了重复频率,就要在待办事项列表中体现重复频率
8、发现新建待办事项和编辑待办事项两个视图好像界面不一样,但功能是一样的,实际上新建待办事项对应的文件是AddTodoView,编辑待办事项对应的文件是TodoDetailView,于是要求Cursor也修改了另一个文件的优先级选择按钮样式,并打开两个文件,手动对齐了下界面上的文字显示效果,但感觉还是略显杂乱
9、还有一个问题,即使只有一条截止日期是今天的Todo条目,也会在待办事项页面右上角显示1逾期、1今日,我需要的是真正过期的Todo条目,比如截止日期是昨天的Todo条目,才被判定为逾期条目,Cursor表示问题在于overdueItems的计算逻辑,同时还修正了overdueTodoCount的计算逻辑、isOverdue方法
10、然后调整分组相关逻辑,要求每次创建新的待办事项时,都默认选择“默认”分组,编辑待办事项时,显示当前这条待办所在的分组
11、剩余其它功能规划:1.可以选择AI对话内容中的部分文字并进行复制等操作 2.完善设置中的导入/导出功能,支持将外部内容导入到备忘录,支持将备忘录导出成txt或md,下周再说
标签: Todo
DevLog:2025年8月19日
1、今天还是修正BUG的一天,先处理昨天的遗留问题:1.AI回答内容里的“.”都显示成了“。”,网址和代码都受此影响;2.思考内容虽然支持流式输出,但始终只能看到两行,看不到全部思考内容;3.提出问题后,只有主动滑动一下才能看到底部的“AI正在思考中”的提示
2、开启了一个新对话,先修正英文句号都被替换成中文句号的问题,Cursor添加了一些调试信息来帮助定位问题,在开启新对话并测试的过程中发现这个问题竟然已经被解决了,我一直在看之前存在错误的对话内容,竟然没有变成正常的渲染结果?先保留调试信息,便于以后再测试其它
3、接下来修正第二个问题,在和支持深度思考的模型对话时,思考内容虽然支持流式输出,但始终只能看到两行,看不到全部思考内容,在修正这个问题之后,我添加了火山方舟的bot,填写了完整的Base URL(https://ark.cn-beijing.volces.com/api/v3/bots/),但对话时收到404错误信息,看来是之前的URL处理逻辑存在问题,Cursor修改了判断逻辑,如果是完整路径就直接使用,如果只有部分路径就自动添加前缀,如果包含api、bots、v3、v2,就直接使用,不添加额外路径,如果是基础路径就自动补全,再多次测试后发现火山方舟的bot路径依然需要应用自动补全后面的/chat/completions,这下常用的模型路径基本都OK了
4、接下来是昨天遗留的第三个问题:提出问题后,只有主动滑动一下才能看到底部的“AI正在思考中”的提示,Cursor改进滚动目标判断、优化滚动时机、增强加载状态处理、改进滚动锚点之后,在发送消息后界面即可自动滚动到底部,显示“AI正在思考中”的提示,搞定
5、继续,这次设置一下打开新对话时的默认模型,直接用模型列表里的第一个模型,“选择AI模型”界面,去掉右上方的“管理模型”按钮,在未打开任何AI对话时,界面右上角不显示“选择模型”
6、接下来修改一下AI对话列表和备忘录列表,两个列表中的条目点击区域都需要加大,整个横条都可以点击;两个列表都需要增加右键菜单,AI对话列表的右键菜单包含置顶/取消置顶(底色有所区别,带pin.fill图标)、修改(弹出对话框修改标题)、删除,备忘录列表的右键菜单包含置顶/取消置顶(置顶后底色有所区别,带pin.fill图标)、删除,Cursor在修改过程中先实现了AI列表页的邮件菜单,但备忘录列表页不支持,提示Cursor对比两个列表的右键菜单实现方式,并去掉了多余的NoteRowView定义,到这里右键菜单和点击区域都搞定了
7、发现刚刚删除的AI对话内容没有出现在设置-回收站里,让Cursor修复回收站相关功能,需求是:目前设置中已有回收站管理入口,但我删除的内容没有出现在回收站里,需要修复一下回收站功能,将回收站分为备忘录回收站和AI对话回收站两部分,可分别管理被删除的备忘录和AI对话,可清空回收站、永久删除、还原到对应的列表中
8、修改过程中虽然Cursor添加了多处调试信息,但测试时我点击设置-回收站,都没有出现调试信息,后来发现其实有两处回收站管理入口,一处是设置-回收站,一处是设置-快速操作-管理回收站,上一步Cursor添加的回收站管理功能都对应第二个入口,但我需要的是第一个入口,于是让Cursor进行了修改,Cursor同时去掉了原有的RecycleBinManagementView(简单界面且功能不完整)
9、Cursor在修改过程中机械地将RecycleBinView嵌入到了SettingsView里,就像把一个弹窗直接放进了界面里一样,不仅丑而且还有单独的标题和关闭按钮,于是让Cursor对回收站界面稍作优化,这次移除了冗余的标题栏,优化了标签页设计,改进了空状态提示,并且优化了列表项设计,风格与应用整体保持统一
10、其它功能规划:1.给AI模型添加界面增加一个测试按钮,添加新模型时先试一下能不能正常响应 2.可以选择AI对话内容中的部分文字并进行复制等操作 3.设置界面已经有数据管理功能,就不需要“设置概览”这个界面了 4.在设置中增加导入/导出功能,支持将外部内容导入到备忘录,支持将备忘录导出成txt或md,当然这些都是小改动,后面还想把Todo功能加进来,让应用功能更丰富一些
11、之前iOS版的DoitWith已经具备了一些核心功能,我询问Cursor能否将这一应用的功能整合进来,并且复用已有的文件和代码,Cursor回复可以,需要提供核心视图文件、数据名、关键功能和其它特殊需求,但由于DoitWith使用的是UserDefaults而非Core Data,Curs建议迁移到Core Data,与备忘录和AI对话使用统一的数据层,并给出了“基础功能整合(创建Todo数据类型、实现基本的GRUD操作、添加导航入口)-功能完善(添加优先级、分类、截止日期、实现搜索和筛选、添加回收站支持)-高级功能(AI助手集成、提醒功能、数据导入导出)”的分阶段实施步骤
12、虽然Cursor觉得可以这样操作,但我还是决定重新创建Todo功能,后续再详细规划需求,分布执行,这样应用就变成了NoteWith-Note/Chat/Doit, all in One
DevLog:2025年7月28日
1、上周经历了Trae、Lingma和Cursor的多轮修改之后,DoitWith原本已经具备的删除Todo和回收站功能暂时消失了,但RecycleBinView文件还在,决定让Cursor试一下恢复这个功能
2、但在模拟器中测试目前的DoitWith时,发现无法创建Todo,创建时Debug信息会提示:
UIKeyboardLayoutStar implements focusItemsInRect: – caching for linear focus movement is limited as long as this view is on screen.
Error: this application, or a library it uses, has passed an invalid numeric value (NaN, or not-a-number) to CoreGraphics API and this value is being ignored. Please fix this problem.
If you want to see the backtrace, please set CG_NUMERICS_SHOW_BACKTRACE environmental variable.
且应用会卡死,直接把这些错误信息给到Cursor,Cursor在修改TodoData.swfit、TodayView.swift、AddTodoView.swift之后,虽然可以构建成功,但又卡在了启动界面,不进入TodayView界面
3、在排查问题的过程中,Cursor在多个文件里添加了调试信息,以便于定位问题,后续可以把这些DEBUG信息给到Cursor,更有针对性的解决问题
4、多次修改之后仍然会卡在启动界面,决定暂时让Cursor简化当前的应用:“不需要Today界面了,进入应用后直接显示Todo界面,底部也不需要在Today和Todo之间切换,先看下都有哪些文件和代码可以简化”,Cursor征求我的同意后删除了TodayView.swift、MainTabView.swift,并对多个文件进行简化,在我的要求下保留了SplashView启动界面和RecycleBinView回收站,Cursor还顺便在设置中添加了回收站功能,简化之后的应用经Xcode模拟器测试,可以正常启动,且可以正常创建Todo
5、但是相比之前我的需求,缺少了长按菜单(删除Todo、修改截止日期、修改分组等)、Todo页面视图也过于简单,甚至看不到Todo条目的截止时间,但是相比之前多了左上角的“Edit”按钮,点击后可以对Todo条目进行拖动排序,后续调整和增加功能时,还是要遵循“小步快跑”的原则,不要一次调整或增加太多功能,这样出现问题后也比较容易排查
6、询问Cursor当前的文件中是否有长按Todo弹出的菜单相关代码、给Todo条目分组的代码,前者已经没有了,后者还存在,但功能未启用,决定先让Cursor完善一下Todo条目的显示:目前Todo列表中仅显示Todo标题,还需要显示描述(Description)、截止日期(Due Date)、重复频率(Repeat)信息,并且适当拉高Todo条目的显示高度,以容纳这些信息,Cursor很快修改完成,并且优化了显示效果
7、重复频率目前有Daily、Weekly、Monthly,分别对应日、周、月,需要增加一个Yearly,即每年重复提醒一次,继续让Cursor添加此功能,很快添加完成
8、感觉现在每一条Todo显示的高度有些太高了,需要稍微减小一些条目高度,可以适当缩短每个Todo的三行内容之间、每两条Todo之间的垂直间距,Cursor给出了修改前后的对比:
调整前:条目间垂直间距:8pt、内容间垂直间距:6pt、图标顶部间距:2pt
调整后:条目间垂直间距:5pt、内容间垂直间距:3pt、图标顶部间距:1pt
9、接下来修正一个问题:点击右上角“+”时,每条Todo的右侧会出现删除按钮,需要调整成点击左上角的”Edit”时,每条Todo的右侧会出现拖动调整顺序按钮(已有,且功能正常)和删除按钮,点击删除按钮可删除本条Todo,点击右上角“+”时,每条Todo的右侧不要再出现删除按钮
10、在修正这些问题之后,继续让Cursor修正删除Todo时卡死、删除的Todo不显示在回收站里,回收站里的Todo点“恢复”之后,不会显示在 Todo界面等问题,顺便解决数据结构冗余的问题(同时存在Todo和TodoItem两个结构体),Cursor在代码中添加了很多调试信息,方便定位问题,结合调试信息和Xcode代码窗口的错误提示,Cursor修正了这一问题,今天就到这儿了