首页 > 解决方案 > 当单击推送通知以及应用程序也在后台时,ViewController 丢失了引用

问题描述

  1. 应用程序在后台
  2. 推送通知被接收并点击
  3. 应用程序将打开并重定向到 SecondViewController 并单击后退按钮
  4. 当从 SecondViewController 单击返回按钮并返回到 FirstViewController 时,“菜单”会丢失来自 MenuViewController 的引用

  1. 推送通知被接收并点击

在此处输入图像描述

  1. 应用程序将打开并重定向到 SecondViewController 并单击后退按钮

在此处输入图像描述

  1. 当从 SecondViewController 单击返回按钮并返回到 FirstViewController 时,“菜单”会丢失来自 MenuViewController 的引用

在此处输入图像描述

我的代码:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    if (application.applicationState == UIApplicationStateActive) {
        .......
    } else {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UINavigationController *navigationController=[[UINavigationController alloc] init];
        self.window.rootViewController = nil;
        self.window.rootViewController = navigationController;

        MenuViewController *menuViewController = [storyboard instantiateViewControllerWithIdentifier:@"MenuViewController"];
        [navigationController pushViewController:menuViewController animated:NO];

        HomeViewController *homeViewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];
        [navigationController pushViewController:homeViewController animated:NO];

        AllNewsNotificationViewController *allNewsNotificationViewController  = [storyboard instantiateViewControllerWithIdentifier:@"AllNewsNotificationViewController"];
        [navigationController pushViewController:allNewsNotificationViewController animated:YES];

        [self.window makeKeyAndVisible];
    }

我的 MenuViewController 实现:

@implementation MenuViewController

- (id)init {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    self = [storyboard instantiateViewControllerWithIdentifier:@"MenuViewController"];
    
    if (!self) {
        return self;
    }
    
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.homeViewController];
    
    NSDictionary *options = @{
                              PKRevealControllerRecognizesPanningOnFrontViewKey : @YES,
                              PKRevealControllerDisablesFrontViewInteractionKey : @NO
                              };
    
    self.revealController = [SubviewPKRevealViewController revealControllerWithFrontViewController:self.navigationController leftViewController:self options:options];
    self.revealController.revealDelegate = self.homeViewController;
    
    // The target view controller must implement this method
    self.navBarGesture =  [[UIPanGestureRecognizer alloc] initWithTarget:self.homeViewController action:@selector(menuPan:)];
    [self.navigationController.navigationBar addGestureRecognizer:self.navBarGesture];
    self.view.backgroundColor = [[Configurations sharedInstance] menuBackgroundColor];
    _topView.backgroundColor = [[Configurations sharedInstance] navegationbarBackgroundColor];
    
    return self;
}

MenuViewController 中的菜单快捷方式(按钮)丢失了引用并且不起作用。

标签: iosobjective-cuinavigationcontroller

解决方案


推荐阅读