分析下 提醒的那个 蛋疼的数字,

那个神奇的数字 = shouldNumber - trueNumber;《梦里踏雪几回,叶下藏花一度,此中有深意,欲辩已忘言》

1,shouldNumber,应该 被点击进入的 提醒个数,现在的逻辑是:只要 放在 application里面的通知,只要是 时间小于当前时刻的,那么都认为 是应该被点击进入的通知,通知个数都是 加 1的。

for (int i=0; i<[totalNotificationArraycount]; i++) {

        NotificationItem *item=[totalNotificationArrayobjectAtIndex:i];

        int period = [self changeToMinisecond:item.time];

        if (period < 0) {//小于现在的这个时刻

            shouldNumber ++;

        }

    }

2,trueNumber,这个数字是 根据  回调 一次 这个方法 didReceiveLocalNotification,认为是 用户点击进入一次的,trueNumber也顺应的 加 1,

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

{

    trueNumber ++;

 }

3,进入提醒页面时调用

-(void)cleanAndSaveNotificationNubmer:(id)sender

{

    trueNumber = shouldNumber;

    [TTCacheUtilwriteObject:[NSStringstringWithFormat:@"%d",trueNumber] toFile:@"trueNumber.plist"];

}

4,home页面加载调用

-(int)badgeNumberForLocalNotification

{

    shouldNumber = 0;

    for (int i=0; i<[totalNotificationArray count]; i++) {

        NotificationItem *item=[totalNotificationArrayobjectAtIndex:i];

        int period = [self changeToMinisecond:item.time];

        if (period < 0) {//小于现在的这个时刻

            shouldNumber ++;

        }

    }

    TTLog(@"应被点入的通知个数 %d",shouldNumber);

    if ([selfnextDayIsComing]) {

        shouldNumber = trueNumber = 0;

        [TTCacheUtilwriteObject:[NSStringstringWithFormat:@"%d",trueNumber] toFile:@"trueNumber.plist"];

    }

 

    trueNumber = [[TTCacheUtilobjectFromFile:@"trueNumber.plist"]intValue];//tureNumber 需要再次读取的,因为他的直可能变化了(从今日提醒页面过来),

 

    return shouldNumber - trueNumber;

}

疑问:可能 这时候 tureNumber的直 的确 等于了 shouldNumber,可是 是shouldNumber的过去时了,shouldNuber会清0重新 安装 刚刚设置的 计算的,这个时候 要是设置少了,那就 有可能是负的了,也就是 说是 两个 shouldNumber相加减的,之前小于当前时间的 有三个,现在的有两个,那么 就是 -1个了,这种情况 只支持 不重新设置的情况

5,在启动时候 会读取缓存中的 trueNumber

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    trueNumber = [[TTCacheUtil objectFromFile:@"trueNumber.plist"]intValue];

}

6,关于 shouldNubmer的修改,只要 会调用 initLocalNotification这个方法, totalNotificationArray就会修改(如果通知有变化的话),然后 这个数组里面的 shouldnumber就会修改,然后 显示的数字就会被改动。

7,两个方向:

从 提醒(今日提醒,提醒设置)页面 ----》home页面

从启动-----》home页面,需要 重新读下 shouldNumber的,

担忧:trueNumber是写入到缓存当中的,会不会 一直老大的数字,不过 只有在 调用 didreceiveLocalnotification的时候才会  tureNumber++,否则的话,最多是跟 shouldNumber一般般大而已。

设置好的情况下,shoudNumber的直 会变化,即小于当前时间 的个数,时间越向后面它的个数会增加,同时如果 进入今日提醒页面的话,那么就会把它 设置跟 shouldNumber此刻一样大的数,(突然有个疑问,最终都是要进入 今日提醒页面的,也就是 不管 trueNumber ++ 还是 不 ++ ,它最终都是 会跟 shouldNumber一样大的,fuck ). 那么在显示的时候,要么 显示没有 提醒的 数,要么 不显示,不存在 trueNumber 一点一点 加 的情况,只要进入今日提醒页面,就把 trueNumber拔高到跟 shouldNumber一般高的情况。。。。。。可是又有问题了,显示的 是 过去当中的,没有看过的通知个数啊,如果看过了,尼玛还给别人提示,多蛋疼啊。。。。。。草,这个数字死活不显示了是什么问题,是不是 trueNumber太 大了。。。。。。也有可能不是这种情况,而是 刚好 都不大,只是 shouldNumber 刚好等于 trueNumber呢。。。。。。这样的话只能看过了这个时间点,等 shouldNubmer增大了,nnd。。。。。。

1,设置一次,很老实不再重新设置了,shouldNumber相对稳定,而tureNumber也相对稳定;

2,没事点着 设置,shouldNumber总是在变,点击进入的 次数 以及 进入提醒,总是 会 让trueNumber变来变去;如果trueNuber被设置到一个高位,而shouldNuber被搞到一个 低位怎么办 ?是不是要重置他们的状态呢?是不是可以 判断,如果 trueNumber大于 shouldNumber,那么就 把 trueNumber  = shouldNumber呢。。。。。。

设置之后,马上有提醒数字,总感觉不合适啊。。。。。。并且现在 用户点击进入的 次数没有纪录啊,纪录了啊,只是后来都被 设置 成 跟shouldNumber一样的数了。。。。。。

假如:7,9,11,4点四个通知,用户看了7,9 这两个通知,然后 11点忘记看了,下午三点看的时候,按道理 应该有一个通知数字在提醒呢, 按照现在的情况,9点看的时候,shouldNuber = 2,而tureNumber = 2,到 三点看的时候,shouldNumber = 3,而trueNubmber = 2,因此刚好是 显示 1.

可是如果设置了呢,比如 用户11点设置了下,这个时候 shouldNumber = 2,trueNumber = 2,设置后 shouldNuber = 1了,而tureNuber = 2,等4点打开的时候,shouldNumber = 2,而tureNumber = 2,本来应该显示一个的,可是显示的是 0,也就是没有显示,fuck。。。貌似主要就是这个问题了。。。。。。要做的就是 shouldNumber > = trueNumber;

要是第一次设置的呢,那么 如果是 所有提醒都小于 现在设置的时刻,那么是不会 有数字的,如果 大于现在的时刻,设置后 马上就会 有数字的。。。。。。好像有数字是必须的。。。。。。

posted @ 2013-07-19 13:27  路在脚下,  阅读(246)  评论(0编辑  收藏  举报