IOS博客项目搭建-22-提醒数字补充

上一节完成了提醒数字的功能,但是还存在问题,就是当我们下拉或上拉首页内容时,底下的提醒数字不会改变,因为图片轮播器,主线程忙着处理滚动,没有时间算计时器的时间,所以,不会请求获取提醒数字的接口,导致这样的问题出现。

看图:从打印的记录可以看出,定时器每隔两秒会调用未读消息数的方法,但是当我们滚动下拉UIView时,定时器就会停止打印,定时器的线程在主线程,我们应该放在子线程让处理。
《IOS博客项目搭建-22-提醒数字补充》

一.将主线程添加到子线程

  // 定时检查未读数
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(checkUnreadCount) userInfo:nil repeats:YES];
    
    // 将定时器改为子线程
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

二、提醒数字在App图标右上角显示

《IOS博客项目搭建-22-提醒数字补充》

这里该如何做呢?
计算出所有未读消息数,然后只需要这样的一个方法即可解决:

   // 4.设置图标右上角的数字
        [UIApplication sharedApplication].applicationIconBadgeNumber = result.count;

《IOS博客项目搭建-22-提醒数字补充》

三、程序进入后台休眠的处理

现在,当程序进入后台,就会默认处于休眠状态,定时器即不会发送请求获取未读数,如果我们不需要程序休眠,继续运行,该怎么处理呢?

这里就需要应用到前边学习的应用程序的代理方法了
IWAppDelegate.m

//  IWAppDelegate.m
//  ItcastWeibo
/**
 * 让程序保持后台运行
 * 1.尽量申请后台运行的时间
 [application beginBackgroundTaskWithExpirationHandler:^{}
 
 * 2.在Info.plist中声明自己的应用类型
 *
 */

/**
 * App进入后台会调用这个方法
 */
- (void)applicationDidEnterBackground:(UIApplication *)application
{
   // 在后台开启任务让程序持续保持运行状态(能保持运行的时间是不确定)
    [application beginBackgroundTaskWithExpirationHandler:^{
        // IWLog(@"哈哈,后台继续运行---");
    }];
    
     // 本地通知(定时提醒弹框)
    // [UILocalNotification ];
}
    原文作者:Corwien
    原文地址: https://segmentfault.com/a/1190000005763186
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞