2

我已经成功地为我的应用程序实现了推送通知。我现在想要完成的是ViewController从 my向根发送某种标志AppDelegate,以防应用收到 PN。

我首先检查我的徽章编号applicationDidBecomeActive:,如下所示:

if (application.applicationIconBadgeNumber>0) {
        self.hasNotification = YES;
        NSLog(@"APNs Message received");            
    }

现在,我不确定如何将此消息传达给我的根ViewController以触发将用户带到其中一个视图的 segue。解决这个问题的最佳方法是什么?

4

1 回答 1

2

鉴于许多视图控制器可能对此事件感兴趣,这听起来像是使用 NSNotifications 提供的发布/订阅模型的不错选择。

要发布通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyEventName" object:optionalPayload];

订阅通知:

- (void)viewWillAppear:(BOOL)animated 
{    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:)
        name:@"MyEventName" object:nil];
}

- (void)dealloc
{
   //Unsubscribe yourself in dealloc
   [[NSNotificationCenter defaultCenter] removeObserver:self];
}

-(void)handleNotification:(NSNotification *)pNotification
{
    NSLog(@"#1 received message = %@",(NSString*)[pNotification object]);    
    //Perform your segue here
}

替代方案:自定义根 VC

如果您已创建自己的特定于域的容器视图控制器作为根视图控制器,则可以执行以下操作:

  • 将事件发送到根视图控制器。
  • 根视图控制器将询问其当前的子/子是否对事件感兴趣(可能通过标记协议),并传播它。

我几乎总是在我的应用程序中使用自定义容器 - RootViewController,因为它可以生成清晰易读的代码,准确描述正在发生的事情。不仅如此,它还使得从这里实现核心布局的东西(例如滑动菜单等)变得非常简单。

于 2013-11-01T09:06:44.683 回答