在接收UILocalNotification时从AppDelegate加载特定的UIViewController

时间:2015-01-09 11:52:28

标签: ios objective-c iphone uiviewcontroller uilocalnotification

我有一个 UILocalNotification ,它以这种方式在 UIViewController UIView 部分中发送:

[[UIApplication sharedApplication] scheduleLocalNotification:_localNotif];

我希望我的应用程序在以下情况下回复它:

  • 在后台:如果用户点击通知唤醒应用并加载相应的UIViewController(有多个UIViewController)
  • 在前台时:刷新当前UIViewController中的数据

该文档引导我在 AppDelegate.m 中修改此方法:

- (void)application:(UIApplication *)application didReceiveLocalNotification: (UILocalNotification *)notification {

    NSLog(@"received notification");
    //reload views
}

但是我不知道如何重新加载UIViewController。

  • 我可以使用UILocalNotification的哪些属性来确定哪些属性 UIViewController发了吗?
  • 如何从AppDelegate加载特定的UIViewController?

1 个答案:

答案 0 :(得分:0)

  

我可以使用UILocalNotification的哪些属性来确定哪些属性   UIViewController发了吗?

您可以使用userInfo UILocalNotification属性来实现此特定目的。所以,像:

localNotification.userInfo = @{ @"currentViewController" : self }; // put the instance of the current view controller into the userInfo dictionary
  

如何从AppDelegate加载特定的UIViewController?

您可以通过应用程序的主rootViewController的{​​{1}}属性访问当前的视图堆栈,该属性存储在UIWindow的{​​{1}}属性中。如果您只想通知您的window已收到本地通知,您可以发布AppDelegate并添加应作为观察者重新加载的视图控制器UIViewController

所以,例如当您收到NSNotification时,代码可能看起来像这样:

NSNotification

在要重新加载的UILocalNotification的{​​{1}}中:

- (void)application:(UIApplication *)application didReceiveLocalNotification: (UILocalNotification *)notification {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"received_local_notification" object:nil];
}