记近期处理iOS10的通知时遇到的一个坑:
iOS10的取消未展示通知方法removePendingNotificationRequestsWithIdentifiers:和removeAllPendingNotificationRequests方法是异步执行的,导致不能取消,而引起用户已取消的通知仍会提醒。。。
异步执行
在解决该问题时想到了“调度组”,将该异步执行的方法放入调度组中,使用调度组进行监听,同时暂时阻塞处理该方法的队列,等处理完成后再在该队列进行后续通知用户或发出刷新UI通知操作~
代码:
dispatch_queue_tqueue = dispatch_get_global_queue(0,0);
dispatch_group_tgroup = dispatch_group_create();
dispatch_group_enter(group);
dispatch_async(queue, ^{
[center removePendingNotificationRequestsWithIdentifiers:@[keys]];
dispatch_group_leave(group);
});
dispatch_group_notify(group, queue, ^{
// 开始调度的通知
});
// 用户提醒 正在处理中
// DISPATCH_TIME_FOREVER表示一直等待该任务,直到执行结束该队列的阻塞才会被取消
dispatch_group_wait(group,DISPATCH_TIME_FOREVER);
因为处理取消的操作系统执行速度比较快,对于主队列的阻塞并不会太长所以采取了这种方式,有大神会有好的方法还请不吝赐教~