#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];
}