接着理 本地通知,uilocalnotification,

initLocalNotification的功能

1,取消 application里面的所有通知

2,从alarmArray = [TTCacheUtil objectFromFile:@"alarm.plist"];这里面 去出需要的通知内容 进行 注册schedule,(alarm.plist变化, 变化性的情况)

3,是否有声音的判断(变化性的情况)

4,跟现在的时间 比较,如果小,那么加上 一天或者 一周或者一个月,(有效性的情况)

因此:通知内容变化必须调用

        有效性在必要的时候检查

疑问:被调用这么多次,可不可能 重复呢?

        小于0的时候,那么如果不是一天呢,是多天呢,比如两天呢,加上一天还是 小于一天啊,乖乖?这个不会出现,因为这个 就是今天的时刻来判断的,纵然是负值 其绝对值 也不会 小于24小时的,

修改的地方:几乎是每一个关隘啊,

开始 didfinishlanch:    [self initLocalNotification];有效性检查

//中间 钝化,resignActive:    [self initLocalNotification];有效性检查,这个会很频繁的,

//退出:willTerminal:    [self initLocalNotification];有效性检查

接收到时候:didReceiveLocalNotification:[self initLocalNotification];变化性检查

声音状态变化的时候:   [SharedAppDelegate initLocalNotification];变化性检查

提醒开关关闭的时候:   [SharedAppDelegate initLocalNotification];变化性检查

//从home页面过去的时候,从提醒设置页面过去的时候(只要不是从appdelegate 的 didreceiveLocalNotification方法过去,这个里面包含了提醒开关关闭的 情况),就调用:[self initLocalNotification];有效性检查+变化性检查,这个会更频繁

假设:如果不做有效性的检查呢?一天 只做一次够么?隔几天 做一次够么?仅仅 打开应用 的时候 做 第一次 够么?只要调用 initLocalNotification这个方法,就会给 application里面放入四个(现在用户全部开的话)有效的 通知。

        如果不管它,就让它调用,随笔调用,有什么坏处么,有什么影响么?

        如果不检查呢,application里面 会变的没有 一个通知,对的,就是这样,调用一次,会删除一次,会被删除完的,如果不删除呢,那么里面会一直放着通知,

因此结论:在通知变化的时候,修改也好,被删除也罢,只要变化了,就做一次调用就好了,

情景:用户安装了应用,然后会 调用一次 didfinish,缓存是空的,载入 0个通知,然后 到 了今日提醒页面,这个时候,还没有进行设置,因此不会执行载入 通知的方法,如果 用户返回,这个时候 application里面 是没有通知的。 (alarmArray是在 今日提醒中生成的)下面一段代码搞定 忧虑

 if (![TTCacheUtilobjectFromFile:@"alarm.plist"]) {

        [TTCacheUtilwriteObject:alarmArraytoFile:@"alarm.plist"];//这里开始写入缓存

        [SharedAppDelegateinitLocalNotification];

    } 

 

关于应用程序打开着 弹框,只有 钝化一次,才能弹框,因为在

- (void)applicationWillResignActive:(UIApplication *)application{

becomeActiveFirst = NO;

}

 

 两个算法:

   int period = [self changeToMinisecond:item.time];//这个 差直不会少的离谱,因为它就是一天的,纵然是 负的也不会超过一天的,

                //period = [self changeToMinisecond:908];

  if (period < 0) {

                            period = [self minusNowTimeWithInterval:(item.time + 24 * 60 * 60 * 7)];

                            //period = period + 24 * 60 * 60 * 7;

                        }

                        notification.fireDate = [now dateByAddingTimeInterval:period];//现在的时刻基础上加一个时间间隔,

3 ,16, 24  ;16 + (3-16 + 24) = 16 + 11 = 27;27  - 24 = 3; 上午三点,看来之前的算法是对的,纯粹是瞎猫碰上死老鼠,

3 ,16,24 ;16 + 3+24 = 27 + 16 = 43;43 -24 = 19;19-12 = 7;下午7点

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