难缠点:
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来处理,第二份工作 用 当天的通知来记忆,
对于未开化的 大脑, 能把天空的蓝 与大海的 蓝 区分开 都是一个了不起的进化,