关于 UILocalNotification 的几个问题
by
问题
-
如何修改已经启动的
UILocalNotification
-
为何
cancelAllLocalNotifications
方法调用完毕之后并不生效
回答
-
停止已经启动的
UILocalNotification
,创建一个新的UILocalNotification
并启动,直接修改已经启动的UILocalNotification
是不生效的,因为你在[[UIApplication sharedApplication] scheduleLocalNotification:notification]
的时候,复制了一个当前的notification,并提交到系统的推送队列上,假如不提交的话,系统是不认识这个notification的。 -
执行完
cancelAllLocalNotifications
后,你再打印[UIApplication sharedApplication].scheduledLocalNotifications
,发现其并不为空,stackoverflow 上有人说这个方法不是同步执行的,只会在当前的 run loop 结束之后生效,有人说可以通过
[UIApplication sharedApplication].scheduledLocalNotifications = nil
的方法使其立即生效,测试发现并没有什么作用,真正有用的方法还是 stackoverflow 上一个开发者提出的变通方法:
[[UIApplication sharedApplication] cancelAllLocalNotifications];
long count;
while ((count = [[[UIApplication sharedApplication] scheduledLocalNotifications] count]) > 0) {
NSLog(@"Remaining notificaitons to cancel: %lu",(unsigned long)count);
[NSThread sleepForTimeInterval:.01f];
}
对于问题1,有时候在 [[UIApplication sharedApplication] cancelLocalNotification:notification]
的时候可能会发现并没有立即cancel掉,也可以采用这样的方法,在 cancel 完之后 执行下 [NSThread sleepForTimeInterval:.01f]
;
参考资料
Subscribe via RSS