2015-01-07 2 views
0

В настоящее время я работаю над обработкой push-уведомления, и я получаю сообщение об ошибке при получении первого уведомления и покажу мне контроллер представления назначения. Но для второго и остальных приложение аварийно. У меня проблема: приложение не получает параметр, который должен получить от push-уведомления.Обращение с Push Notification на iOS

AppDelegate.m

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    //[PFPush handlePush:userInfo]; 

    NSLog(@"didReceiveRemoteNotification userInfo=%@", userInfo); 

    if(application.applicationState == UIApplicationStateActive) 
    { 
     NSDictionary *aps = userInfo[@"aps"]; 
     NSString *alertTitle = @""; 

     if([userInfo[@"page"] isEqualToString:@"ga"]) 
     { 
      alertTitle = @"General Advisory"; 
     } 
     else if ([userInfo[@"page"] isEqualToString:@"cr"]) 
     { 
      alertTitle = @"Customer Recommendation"; 
     } 


     UIAlertView *alert = [[UIAlertView alloc] 
           initWithTitle:alertTitle 
           message:[aps objectForKey:@"alert"] 
           delegate:self 
           cancelButtonTitle:@"Close" 
           otherButtonTitles:nil]; 
     [alert addButtonWithTitle:@"View"]; 
     //set tag to id 
     alert.tag = [userInfo[@"id"] intValue]; 
     [alert show]; 
    } 
    else if(application.applicationState == UIApplicationStateInactive) 
    { 
     [self movePageAfterReceiveNotification:userInfo[@"page"] withId:userInfo[@"id"]]; 
    } 
} 

- (void)movePageAfterReceiveNotification:(NSString *)page withId:(NSString *)pageId 
{ 
    UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; 
    UITabBarController *tabBarVC = (UITabBarController*)topController.presentedViewController; 

    if (tabBarVC.selectedIndex > 0) 
    { 
     [tabBarVC setSelectedIndex:0]; 
    } 
    UINavigationController *navcon = (UINavigationController*)[tabBarVC.viewControllers firstObject]; 
    HomeViewController *homeVC = (HomeViewController*)[navcon topViewController]; 

    NSLog(@"Page: %@",page); 
    NSLog(@"ID: %@",pageId); 

    if ([page isEqualToString:@"ga"]) 
    { 
     //redirect to homeVC 
     [homeVC loadDataGeneralAdvisoryFromPushNotif:pageId]; 
    } 
    else if ([page isEqualToString:@"cr"]) 
    { 
     //redirect to homeVC 
     [homeVC loadDataCustomerRecommendationFromPushNotif:pageId]; 
    } 

} 

ошибка как это:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CRDetailViewController loadDataCustomerRecommendationFromPushNotif:]: unrecognized selector sent to instance 0x14756d180' 
+0

в этом VC loadDataCustomerRecommendationFromPushNotify: попробуйте, может быть заклинание ошибка – Spynet

+0

Но первый параметр был успешно загружен. –

+0

(HomeViewController *) [navcon topViewController] Вероятно возвращает контроллер представлений, который является экземпляром CRDetailViewController, добавляет ваш метод в CRDetailViewController или что-то еще с этим контроллером – user2432612

ответ

0

topViewController вашего первого навигационного контроллера (вкладка один) не HomeViewControlled но CRDetailViewController. Как вы можете видеть сообщение об ошибке: '-[CRDetailViewController loadDataCustomerRecommendationFromPushNotif:]: unrecognized selector sent to instance 0x14756d180'

Возможно, вы хотите, чтобы ваш HomeViewController обрабатывал эту информацию, потому что этот контроллер представления является тем, который реализует ваш метод loadDataCustomerRecommendationFromPushNotif.

Я думаю, вы должны позвонить [navcon popToRootViewControllerAnimated:NO] прямо перед HomeViewController *homeVC = (HomeViewController*)[navcon topViewController];

Что-то вроде этого, вероятно:

UINavigationController *navcon = (UINavigationController*)[tabBarVC.viewControllers firstObject]; 
[navcon popToRootViewControllerAnimated:NO] 
HomeViewController *homeVC = (HomeViewController*)[navcon topViewController]; 
+0

Спасибо, работаю как шарм –