您描述的问题是由当前本地通知引起的:在处理通知时,它仍在计划通知列表中,因此刷新表格视图将没有效果。解决此问题的方法是将重新加载表视图推迟到处理通知之后,例如
// In your app delegate
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
dispatch_async(dispatch_get_main_queue(), ^{
[self.localNotificationsController reloadDataIfNeeded];
});
}
// In your controller that shows the local notifications
- (void)reloadDataIfNeeded
{
if (![self isViewLoaded]) return;
[self.tableView reloadData];
}
如果您只使用只触发一次的通知,您也可以从列表中删除通知(这样您就可以确定通知无论如何都会消失):
// In your app delegate
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[application cancelLocalNotification:notification];
[self.localNotificationsController reloadDataIfNeeded];
}
至于您问题的第二部分(“如何在显示通知后推送特定视图(当手机锁定时用户滑动应用程序图标时?”),有两种情况下如何激活应用程序本地通知。
- 您的应用程序已暂停,但仍在内存中。然后选择本地推送通知将使应用程序进入前台,
-application:didReceiveLocalNotification:
将被调用,[application applicationState]
并将UIApplicationStateInactive
您的应用程序没有运行,即没有挂起,不在内存中。launchOptions
然后您将在in 中收到本地通知-application:didFinishLaunchingWithOptions:
:
UILocalNotification *localNotification = [launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
尽管文档说了什么,在这种情况下不会-application:didReceiveLocalNotification:
被调用。
因此,为了显示唤醒应用程序的通知,您可以在这两种情况下推送您的控制器。