如何从一个选择性的工作日日期中创建一个通知触发器,该日期每周重复一次,直到满足条件为止-swift



我正在构建一个药物提醒应用程序,我想问几个问题,如果有人能回答其中的一些问题,那就太好了。

我希望我的应用程序允许用户设置选定的工作日日期(星期一至星期日)。用户然后可以设置他们希望服用药物的时间(用户可以设置他们喜欢的次数,当然,这取决于他们需要服用的剂量)。则用户可以键入包装中的药丸的总量。

知道问题出在这里-我不知道如何做以下事情

1:仅为工作日创建选择性日期,并在用户已设置的工作日列表中创建通知触发器

2:在一个日期上设置多个计时器-例如,我想在周一、周二下午2:00和早上6:00服用药物。-这意味着我希望我的应用程序在每周一下午2:00、早上6:00、周二下午2:6通知用户

3:创建一个通知触发器,该触发器遍历工作日和时间列表,并每周重复一次,直到药物用完。(注意*正如我之前提到的,我会询问用户包装中有多少药片,此外,我还会询问他们需要服用的药片数量,我会创建一个函数,每次触发通知时,该函数会从总数中减去药片数量。当药片总量达到0 时,应用程序将停止通知用户

如果有人能给我一个提示或任何能帮助我的东西,那就太好了。-注意我没有要求任何人为我创建应用程序,只是帮助我开始 *

  1. 您应该使用Calendar组件。它有很多功能可以帮助你完成与日历相关的工作。这是工作日的文档页https://developer.apple.com/documentation/foundation/calendar/component/weekday

  2. 借助上面提到的日历和日期,您可以进行所需的计算,并将时间保存在UserDefaults、本地数据库或服务器中。这是Date的文档页https://developer.apple.com/documentation/foundation/date

  3. 这可以通过多种方式实现,要么在服务器上进行计算,要么在手机上本地进行计算。这里有很多事情要说,所以你可以在谷歌上搜索如何制作提醒应用程序、待办事项应用程序或警报应用程序等。

注意:以下建议只适用于快速原型设计

仅为工作日创建一个选择性日期,并在用户已设置的工作日列表中创建一个通知触发器

这是两个不同的问题:

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与看板。

祝你好运。

相关内容

  • 没有找到相关文章

最新更新