Отображать NavigationController из AppDelegate при поступлении push-уведомления

#ios #objective-c #appdelegate

#iOS #objective-c #appdelegate

Вопрос:

введите описание изображения здесь

Это текущая настройка, которую я использую для отображения беседы в чате.

1): Приходит push-уведомление

2): didRecieveRemoteNotification: получает полезную нагрузку и выполняет сообщение NSNotification для корневого контроллера представления (начальный вид) Который является UITabBarController

3): UITabBarController получает уведомление NSNotification. Наблюдатель и выполняет функцию, которая выполняет ( [self setSelectedIndex:2]; ) И отправляет ту же полезную нагрузку с использованием NSNotification

4): NavigationController Получает полезную нагрузку NSNotification с помощью наблюдателя, выполняет функцию и выполняет Push-переход к Viewcontroller чата, встроенному в UINavigationController

Эти шаги работают для меня, за исключением того, что это долгий путь многократной передачи данных до прибытия в конечный пункт назначения, не говоря уже о том, что это вызывает проблемы при выполнении множества нажатий, вызывающих повреждение NavigationController.

Чего я хотел бы добиться, так это того, что AppDelegate показывает ViewController Chat Conversation с помощью NavigationController и не вызывает одного и того же поврежденного NavigationController при повторном отображении одного и того же дисплея. И в то же время передавать ему полезную нагрузку из Push-уведомления.

Вот мое AppDelegate didRecieveRemoteNotification:

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    if([[userInfo objectForKey:@"viewController"]  isEqual: @"chat_controller"]){

        if ( application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground  )
        {
            NSDictionary *userDictionary = @{@"nick_from" : [userInfo objectForKey:@"nick_from"],@"nick_to" : [userInfo objectForKey:@"nick_to"]};

            [self pushChatNotification:userDictionary];
        }
        else {

            NSString *message = [NSString stringWithFormat:@"%@ sent you a message want to reply?",[userInfo objectForKey:@"nick_from"]];

            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"New message"
                                                                message:message
                                                               delegate:self
                                                      cancelButtonTitle:@"Reply"
                                                      otherButtonTitles:@"Cancel", nil];
            [alertView show];

        }

    }


}


-(void)pushChatNotification:(NSDictionary *)userDictionary {

    [[NSNotificationCenter defaultCenter] postNotificationName:@"conversationParameters"
                                                        object:nil
                                                      userInfo:userDictionary];

}