您的当前位置:首页正文

iOS10调度组处理通知问题

来源:华拓网

记近期处理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);

因为处理取消的操作系统执行速度比较快,对于主队列的阻塞并不会太长所以采取了这种方式,有大神会有好的方法还请不吝赐教~