上一节完成了提醒数字的功能,但是还存在问题,就是当我们下拉或上拉首页内容时,底下的提醒数字不会改变,因为图片轮播器,主线程忙着处理滚动,没有时间算计时器的时间,所以,不会请求获取提醒数字的接口,导致这样的问题出现。
看图:从打印的记录可以看出,定时器每隔两秒会调用未读消息数的方法,但是当我们滚动下拉UIView时,定时器就会停止打印,定时器的线程在主线程,我们应该放在子线程让处理。
一.将主线程添加到子线程
// 定时检查未读数
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(checkUnreadCount) userInfo:nil repeats:YES];
// 将定时器改为子线程
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
二、提醒数字在App图标右上角显示
这里该如何做呢?
计算出所有未读消息数,然后只需要这样的一个方法即可解决:
// 4.设置图标右上角的数字
[UIApplication sharedApplication].applicationIconBadgeNumber = result.count;
三、程序进入后台休眠的处理
现在,当程序进入后台,就会默认处于休眠状态,定时器即不会发送请求获取未读数,如果我们不需要程序休眠,继续运行,该怎么处理呢?
这里就需要应用到前边学习的应用程序的代理方法了
IWAppDelegate.m
// IWAppDelegate.m
// ItcastWeibo
/**
* 让程序保持后台运行
* 1.尽量申请后台运行的时间
[application beginBackgroundTaskWithExpirationHandler:^{}
* 2.在Info.plist中声明自己的应用类型
*
*/
/**
* App进入后台会调用这个方法
*/
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// 在后台开启任务让程序持续保持运行状态(能保持运行的时间是不确定)
[application beginBackgroundTaskWithExpirationHandler:^{
// IWLog(@"哈哈,后台继续运行---");
}];
// 本地通知(定时提醒弹框)
// [UILocalNotification ];
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。