梳理,

难缠点:

1,时间转换,

2,融合,分开,

3,筛选,(开关是否打开;时间是否是当天;)

4,开关切换,

5,view 结构的 构建,多行文本的支持,

6,何时 对提醒数据的更新,

7,对月的 处理,每月几号的情况,按照月的提醒,

8,对 吃药状态的重置,对 提醒数字的重置,

9,缓存的清理,

方案:

提醒数字:其实这个数字对于 直接从 通知提醒 里面 进入程序 是没有意义的,只有 有提醒了,也没有处理,而是点击图标进入程序的,这个数字是 做提醒用的。

方案一:shouldNumber(从一天内的所有的通知里面,比当前时间小的都认为是 应该读的通知) - trueNumber(进入 didreceiveLocalnotification方法,会加1的,其实+1不+1已经没有用了,因为 只要是 调用 是通过触发通知 进入程序的,那么 trueNumber都会直接 的 使其 等于 shouldNumber,),而同时会 把trueNumber维护起来,之前没有维护 shouldnumber,是因为 每次这个会重新计算,哪怕 是关闭了程序,在进入。之前有一个bug是关于清空数字的,是在进入home 页面都清空了,前提是 第二天的 时候,其它的应该都可以了,因为 只要 维护 一个 truenumber就可以了,那个 +1一点用处都没有,如果一直不进入 今日提醒呢,那么shouldnumber会一直增加,提醒的数字也是 符合要求的, 只因为 truenumber 没有必要 一次 +1一次+1的增加,而 可以一下子过渡 到 shouldNumber的, 

而现在 注销了之后,shouldnumber没有维护,truenumber是维护了的,因此 做减法,就变成了负数,因此 需要 把shouldnumber也维护起来,可是 现在想维护也 很难维护了,因为 30天的 周期,不知道每天 会有几个通知,可能是 四个,也可能是 五个。

方案二:获取时间段内 收到的通知(需要在所有 已经注册了的通知里面,进行 时间的匹配,找到这个时间段 应该发送的通知,不管发送没有发送,依据的 是根据注册里面找的),然后减去这个时刻之前的 通知,那么就是 应该提醒的通知,简单的 做减法。

方案三:每天在今日提醒里面 都有对应的 提醒通知,这个数据 是在缓存里面 自己维护了的,那么 一旦用户 进入 今日提醒页面,把当前时间之前的 通知都设置成 已读(需要加个字段的),那么 下次统计的 时候,就来自己维护的这个 数据里面找 要提醒的数字,这个范围 会小很多, 只要满足两个条件就可以,一个是 未读的,一个是 小于当前时间的。只是 维护这个 array也不是纯粹的,也是 需要 筛选的,

显然第三个方案是 最好的,

view 的排版

圆角,和下面的线,这个地方 应该把 每个类型的 数据用数组分开了的,

逻辑:

a,用户改变,一,对提醒声音开闭;二,对提醒的开闭;

b,从服务器的改变,一,更新时间的不同

c,一直藏在心底的 那一个隐晦的 判断逻辑,失效时间的添加,

发现:1,通知的数字你设置多少 它就是多少的,并不会累计自动给你添加的,

        2,在关闭客户端时候,收到通知是不会 回调 didreceivelocalnotification的,通知是通过 didfinishlanch方法里面的参数传递过去的,

        3,当铺盖一层 登陆的 controller的时候,appdelegate是还活在内存当中的,

        4,为了 几个增多的字段,而把几个不同的类型 放到 了一个大的array里面,而在排版 view 的时候,又需要用到 每个类型 自己对应的 索引,还有 它们 每个类型 各自的总数,这个地方 就极大的 混淆了,小 model,大model,其它不是 model的 属性 也给加进来了,比如,是否被选择了,是否 有通知开关了,以及个数, 

        5,[SharedAppDelegate performSelectorInBackground:@selector(initLocalNotification) withObject:nil];,感觉挺丰富的,还有之前发现的 延迟方法,

SharedAppDelegate performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#> inModes:<#(NSArray *)#>

分析方案三,

notificationItem,有好几套的,(必须保持一致的,保持有序,no word,懂的话就 铁荡),

//item---->medicineArray+sugarCheckArray+referralArray---->commonarray--->sortedCommonArray ---->timeArray。。。sortedCommonArray ---->arrayFinal----->alarmarray---->notifications,

commonarray 是从网络中读取的,而提醒的 通知是 自己设置到 application里面去的,那么 怎么 用commonarray 里面的 数据 来帮助 ,来协助记忆 关于 notification通知的 信息呢, 那个提醒的 数字 可以 完全脱离  设置的 通知,而仅仅 根据当日的 通知个数 来处理 ,因此现在 需要分开来看,一共需要做两份工作。1,设置好 在未来时刻的 所有的 通知,保证 改通知人家 吃药通知人家吃药;2,计算出 某一个既定时刻前,用户没有读的通知。第一份工作 用 schedule notification来处理,第二份工作 用 当天的通知来记忆,

对于未开化的 大脑, 能把天空的蓝 与大海的 蓝 区分开 都是一个了不起的进化,

原文地址:https://www.cnblogs.com/guligei/p/3251793.html