我正在构建一个药物提醒应用程序,我想问几个问题,如果有人能回答其中的一些问题,那就太好了。
我希望我的应用程序允许用户设置选定的工作日日期(星期一至星期日)。用户然后可以设置他们希望服用药物的时间(用户可以设置他们喜欢的次数,当然,这取决于他们需要服用的剂量)。则用户可以键入包装中的药丸的总量。
知道问题出在这里-我不知道如何做以下事情
1:仅为工作日创建选择性日期,并在用户已设置的工作日列表中创建通知触发器
2:在一个日期上设置多个计时器-例如,我想在周一、周二下午2:00和早上6:00服用药物。-这意味着我希望我的应用程序在每周一下午2:00、早上6:00、周二下午2:6通知用户
3:创建一个通知触发器,该触发器遍历工作日和时间列表,并每周重复一次,直到药物用完。(注意*正如我之前提到的,我会询问用户包装中有多少药片,此外,我还会询问他们需要服用的药片数量,我会创建一个函数,每次触发通知时,该函数会从总数中减去药片数量。当药片总量达到0 时,应用程序将停止通知用户
如果有人能给我一个提示或任何能帮助我的东西,那就太好了。-注意我没有要求任何人为我创建应用程序,只是帮助我开始 *
-
您应该使用Calendar组件。它有很多功能可以帮助你完成与日历相关的工作。这是工作日的文档页https://developer.apple.com/documentation/foundation/calendar/component/weekday
-
借助上面提到的日历和日期,您可以进行所需的计算,并将时间保存在UserDefaults、本地数据库或服务器中。这是Date的文档页https://developer.apple.com/documentation/foundation/date
-
这可以通过多种方式实现,要么在服务器上进行计算,要么在手机上本地进行计算。这里有很多事情要说,所以你可以在谷歌上搜索如何制作提醒应用程序、待办事项应用程序或警报应用程序等。
注意:以下建议只适用于快速原型设计
仅为工作日创建一个选择性日期,并在用户已设置的工作日列表中创建一个通知触发器
这是两个不同的问题:
A) 为用户创建一种仅在工作日选择一天或多天的方式。
对于这一点,有不同的方法。
一旦方法是使用多选按钮:[M][T][W][Th][F]
。
如果对每个按钮应用一个唯一的值,例如1 2 4 8 16
,则可以只存储一个表示该工作日状态的值。
例如,值19表示:
- 你能把16减去19吗?对然后,
_ _ _ _ F
。你还剩3个 - 你能把8减去3吗?不,跳过
- 你能把4减去3吗?不,跳过
- 你能把2减去3吗?对然后,
_ T _ _ _ F
。你还有1个 - 你能从1中减去1吗?对然后,
M T _ _ _ F
。你没有。完成
使用此方案,您可以用更少的空间换取更多的处理能力。
否则,您可以在数据库中有一个表,该表具有唯一的id,并且每天都有一列。该唯一id被其他表用作外部id。
B) 创建一个通知,用于检查用户选择的工作日的天数。
这可以通过使用上面的逻辑来完成;然而,在iPhone和Android等设备中,您需要学习如何使用后台服务来进行此检查。
在一个日期上设置多个计时器-例如,我想在周一、周二下午2:00和早上6:00服用药物。-这意味着我希望我的应用程序在每周一下午两点和早上6点以及周二下午两点和上午6点通知用户
为了简单起见,数据库中可以有两个表。第一个表是用户,以防您有多个用户。
第二个表是时间,其中一列需要有一个外键指示该计时器属于哪个用户
您可以存储星形日期时间和计时器的持续时间(以秒为单位)。通过简单的数学运算,您可以将秒(如果需要精度,则为毫秒)转换为天、小时、分钟和秒。
然后,后台服务只检查这些表。如果警报在当前时间和开始日期时间之间,并且小于24小时,则通知用户。
创建一个通知触发器,该触发器会遍历工作日和时间列表,并每周重复一次,直到药物用完。(注意*正如我之前提到的,我会询问用户包装中有多少药片,此外,我还会询问他们需要服用的药片数量,我会创建一个函数,每次触发通知时,从总数中减去药片数量。当药片总量达到0时,应用程序将停止通知用户。
;每周重复";可以是使用BIT(0或1)作为标志的另一列。
药片是另一张表,你可以在那里列出它们和它们的数量。
此外,由于同一个药丸可以有多个用户或计时器,因此需要另一个表来关联它们。一个表user_timer_pill,其列与以下类似:
[unique_id][user_id][timer_id][pill_id]
现在,它只是一个查询,上面写着:基于这个user_id和这个timer_id,给我一个或多个pill_id。
或者,如果您将这个外键user_timer_pill_id添加到pill表中,您可以找到一个或多个要通知的用户,还可以找到哪些计时器受到影响,这样您就可以用红色或其他颜色标记它们。
最后,我的建议是:在做一个项目时,把它分解成大块,然后每个大家伙都把它分解为小块。例如:
假设您决定使用数据库。
- 如何创建数据库
- 如何创建表格
- 每个表之间的关系是什么:
- 一对一,一对多,多对多
- 如何使用联接表进行查询
- 每个表格的每一列都有哪些限制
通知:
- 持续检查要通知的数据的后台服务
- 通知机制
- 如果选择了通知,则人员着陆的活动
应用程序组织:MVC、MVVM、MVP?
我建议使用一些敏捷的方法来组织自己。研究Scrum与看板。
祝你好运。